Spring学习笔记04 - 注入原理以及简易流程

注入(Injection)

什么是注入?

通过Spring工厂以及配置文件,为 所创建的对象成员变量赋值

为什么要注入?

传统赋值方式 调用set方法一一赋值。通过这种形式为成员变量赋值,存在藕合。
好处:通过注入,降低藕合。

//传统赋值方式 调用set方法赋值
ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");
Person person = (Person) ctx.getBean("person");
person.setId(1);//通过代码赋值 存在藕合
person.setName("adam");
System.out.println("person = "+ person);
//ouput
// person = Person{id=1, name='adam'}

如何进行注入?

  • 为类的成员变量提供set get方法
  • 配置Spring的配置文件 applicationContext.xml
<bean id="person" class="com.gogogo.Person">
    <property name="id">
        <value>10</value>
    </property>
    <property name="name">
        <value>Cristina</value>
    </property>
</bean>

测试注入结果如下

ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");
Person person = (Person) ctx.getBean("person");
System.out.println("person = "+ person);
//output
// person = Person{id=10, name='Cristina'}

注入的好处是什么?

**解藕合**
只需要修改配置标签里对应的值,不涉及代码修改,不需要重新编译代码。

Spring 注入的原理分析(简易版)

属性值要和代码里定义的属性值对应。
Spring操作配置文件,要将配置文件翻译成对应的代码
bean - 反射创建对象
property - 设置对应的 set 方法
读取bean 标签,获取 id 和 类型 - 反射创建了对象
读取property标签 - 为一个对象的成员变量赋值
读取property内部name属性,对应的value标签,为其赋值 类似set方法
Person person = (Person) ctx.getBean("person"); 通过getBean 传入参数person, 在applicationContext.xml 配置文件里找到对应的bean标签,创建了类,然后bean标签里面的property标签,name="id" name="name" 这两个对应类成员变量(private String id; private String name;)一一对应,下图两个成员变量是 name password,property 标签里的name值就分别是name password。value 标签对应的是给成员变量赋值
在这里插入图片描述
Spring 通过底层 调用对象属性对应的set方法,完成成员变量的赋值,成为set注入。(即必须 提供set方法,可自行验证,注释set方法 编译会报错)。
(反射创建对象 类似,会调用无参构造方法,必须提供类的构造函数,没有的话系统自动提供无参的构造方法,但也是提供了嘿)

学习开心 😄
“Slow progress is better than no progress.”
加加油~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值