当前位置: 首页 > news >正文

Spring的构造注入

  • 1.开发步骤
  • 2.构造方法的重载
    • 2.1参数个数不同
    • 2.2构造参数个数相同时
  • 3.注入总结

注入:通过Spring的配置文件,为成员变量赋值
Set注入:Spring调用Set方法,通过配置文件,为成员变量赋值
构造注入:Spring调用构造方法,通过配置文件,为成员变量赋值

1.开发步骤

  • 提供有参构造方法

    public class Customer implements Serializable {
    private String name;
    private int age;

    public Customer(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    @Override
    public String toString() {
        return "Customer{" +
                "name='" + name + ''' +
                ", age=" + age +
                '}';
    }
    

    }

  • 通过Spring的配置文件来为成员变量赋值

    tom 1

一个构造参数,对应构造方法的一个构造参数,而且顺序是对应的
在这里插入图片描述

2.构造方法的重载

我们先来回顾一下什么是方法的重载

             1.在同一个类中
             2.方法名相同
             3.形参列表不同(个数,类型,顺序)
             4.方法的重载和返回值类型无关,和权限修饰符也无关

那么当构造方法发生重载的时候,我们想要构造注入为成员变量赋值需要注意什么细节呢?

2.1参数个数不同

public class Customer implements Serializable {
    private String name;
    private int age;

    public Customer(String name) {
        this.name = name;
    }

    public Customer(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Customer{" +
                "name='" + name + ''' +
                ", age=" + age +
                '}';
    }
}

如果说,我们现在只想为name属性赋值的话,那么age就会有默认值

<bean id="customer" class="com.zyh.basic.Customer">
    <constructor-arg >
        <value>jack</value>
    </constructor-arg>
 
</bean>

在这里插入图片描述

总结:
	我们可以发现当构造参数个数不同的时候,我们可以通过
	<constructor-arg >标签的数量来进行区分

2.2构造参数个数相同时

我们再来看看另外一种情况,当重载的构造方法中,有两个构造方法的参数都只有一个,那么Spring怎么知道我们要为哪一个成员变量赋值呢。这个时候我们就应该通过成员变量的类型来进行区分

通过标签引入type属性,进行类型区分
<bean id="customer" class="com.zyh.basic.Customer">
    <constructor-arg type="int" >
        <value>3</value>
    </constructor-arg>
 
</bean>


public class Customer implements Serializable {
    private String name;
    private int age;

    public Customer(String name) {
        this.name = name;
    }

    public Customer(int age) {
        this.age = age;
    }

    public Customer(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Customer{" +
                "name='" + name + ''' +
                ", age=" + age +
                '}';
    }
}

type属性指明要赋值的参数类型

<bean id="customer" class="com.zyh.basic.Customer">
    <constructor-arg type="int" >
        <value>3</value>
    </constructor-arg>
 
</bean>

在这里插入图片描述
这个时候,我们还会有一种疑惑,如果有两个成员变量的类型一样呢?
哈哈,大家想到这里肯定是有经过认真思考的,不过大家可能忘记了重载的定义,我们说重载指的是参数的个数,类型,顺序中有一个不同就构成了重载,但是注意,我们从来都没有说过,参数的名字不同构成重载,着就是语法报错,毕竟我们要记住,参数名是可以随便乱取的

3.注入总结

  • set注入用得比较多
  • 构造注入相对来说毕竟麻烦,毕竟有构造方法重载的问题
  • Spring框架中,大量应用了set注入

相关文章:

  • 我的世界1.20.1forge模组开发进阶物品(7)——具有动画、3D立体效果的物品
  • CES Asia 2025聚焦量子计算,多领域进展引关注
  • 网络流算法: 最大流算法
  • Vue常用Excel导出工具SheetJS
  • 配置Spring Boot中的Jackson序列化
  • python实战项目58:采集蜻蜓FM热门音频top排行榜
  • DeepSeek后训练:监督微调和强化学习
  • WebGL 渲染器 WebGLRenderer
  • 从0-1学习Mysql第九章: 分区与分库分表
  • 【网络安全 | 漏洞挖掘】利用文件上传功能的 IDOR 和 XSS 劫持会话
  • React(12)案例前期准备
  • PyQT6是干啥的?
  • 2.数据结构:1.Tire 字符串统计
  • PDF文档中表格以及形状解析
  • Electron一小时快速上手
  • 【Swift 算法实战】城市天际线问题解法
  • 231.跳跃游戏
  • 蓝桥杯备考:DFS剪枝之数的划分
  • React 组件基础介绍
  • 新一代跨境电商ERP系统:从订单到发货的全流程自动化管理
  • 网站一年的维护费用/seo优化顾问服务
  • 网站广告赚钱/seo优化自学
  • php开源企业网站/百度指数网
  • 手机做网站教程/2023第二波疫情已经到来了
  • 全球建筑设计网站/广告联盟app下载
  • 哈尔滨网站设计联系方式/域名查询备案