Spring学习笔记二:注入方式

转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6774608.html 

    我们说,IOC的实现方式是依赖注入,也就是把被依赖对象赋值到依赖对象的成员属性。怎么做到呢?有三种方式。

    一:设值注入

    设值,顾名思义就是:把被依赖值设置为成员变量的值。

假设类A定义如下:

class A{
    private InterFace_B b;//面向接口编程
....
//生成b的setter和getter
public void setB()...
public InterFace_B getB()...

    设值注入配置如下:

<bean id="Imp_B" class="com.ygj.B_Imp"></bean>//注册接口B的实现类:id,完整路径

<bean id="A" class="com.ygj.A">//注册类A:id,完整路径
  <property name="b" ref="B"/>//设置依赖:name为成员对象在A中属性名,ref为被依赖的对象注册的id,这里把接口B的实现类Imp_B赋值进来 
</bean>

    Spring在创建类A对象时,就会同时创建类B对象,然后调用对象A的setB(B)方法把ref指向的对象传进去,赋值给成员b。所以叫设值注入。

    二:构造注入

    构造注入的方式就是:通过构造函数传参的方式进行成员对象的赋值。

假设类A定义如下:

class A{
    private InterFace_B b;//面向接口编程
....
public A(...){..,InterFace_B b}//A的构造函数

    构造注入的配置如下:

<bean id="Imp_B" class="com.ygj.B_Imp"></bean>//注册接口B的实现类:id,完整路径

<bean id="A" class="com.ygj.A">//注册类A:id,完整路径
  <constructor-arg name="b" ref="B"/>//配置构造参数:name为成员对象在A中属性名,ref为被依赖的对象注册的id,这里把接口B的实现类Imp_B赋值进来 
</bean>

    两种注入的不同有两处:

    1:bean标签中用的是property标签还是constructor-arg标签

    2:设值注入要定义setter/getter方法,构造注入则要定义带参构造函数

    三:自动装配(自动注入依赖)

    用到自动装配的话,就不需在配置文件中书写众多属性标签、构造参数标签等。

    前提是,bean类的定义要符合自动装配类型的规则,如:byName对应设值装配,所以bean类要定义好属性的setter和getter。constructor则定义好带参构造函数。

   自动装配有两种粒度,分别为 全局默认自动装配、个别bean自定义装配。

   1:全局默认自动装配

   在beans根标签中配置default-aotuwire属性,则各个bean都按照这个模式进行自动装配。

    2:个别bean自定义装配

   在注册的bean标签设置autowire属性。

   3:自动装配的模式

    设置了自动装配,则配置bean时,就可以省略依赖对象的属性配置了。

    

   

原文地址:https://www.cnblogs.com/ygj0930/p/6774608.html