spring之Autowire

当使用spring为一个对象的属性注入时,通常使用xml文件的property元素和ref属性,但是我们也可以使用spring中的autowire进行注入

使用方法如下

<bean id="service" class="example.service" autowire="byName"/>

autowire有以下四种属性

1、no

    不适用自动装配,需要程序员手动配置注入

2、byName

  顾名思义,就是通过的bean的name来匹配进行注入,也就是bean的id。如:bean A有个属性mastermastersetter方法就是setMasterA设置了autowire="byName",那么Spring就会在容器中查找名为masterbean通过setMaster方法注入到A中。

 这里说下id和那么的区别,其实没啥区别,主要就是name可以使用特殊字符,而id不能,而日常使用中,也没谁会在name中设置,所以说两者没区别。

3、byType

通过的bean的type来匹配进行注入,也就是bean的id。如:bean A有个属性master类型为org.springframework.beans.Conversion.classmastersetter方法就是setMasterA设置了autowire="byType",那么Spring就会在容器中查找class类型为Conversionbean通过setMaster方法注入到A中。如果有多个相同的class类型,则匹配报错

  4、constructor

  类似于byType,但是是通过构造函数的参数类型来匹配。假设bean A有构造函数A(B b,   C c),那么Spring会在容器中查找类型为BCbean通过构造函数A(B b, C c)注入到A中。与byType一样,如果存在多个bean类型为B或者C,则会抛出异常。但时与byType不同的是,如果在容器中找不到匹配的类的bean,将抛出异常,因为Spring无法调用构造函数实例化这个bean

二、@autowired

1、使用annotation的方式来注入,@Autowired是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Qualifier

a、将@autowored写在被注入的成员变量上,就不用再xml文件中配置了,在程序中去掉相应的setter和getter方法,

b、还可以写在构造方法上、setter方法上

 c、@Qualifier

@Qualifier("XXX") 中的 XX是 Bean 的名称,所以 @Autowired 和 @Qualifier 结合使用时,自动注入的策略就从 byType 转变成 byName 了。

不过需要注意的是@Autowired 可以对成员变量、方法以及构造函数进行注释,而 @Qualifier 的标注对象是成员变量、方法入参、构造函数入参

原文地址:https://www.cnblogs.com/pjfmeng/p/7542749.html