spring容器的自动装配方式总结

前面我们学习了spring容器的两种注入方式,设值注入和构造注入,并且对引用变量和基本变量(或者String变量)注入的方式都做了不同说明,现在我们继续来学习一些简便特殊的注入方式:

一、autowire(自动装配)

<bean>的autowire属性有如下六个取值,他们的说明如下:

1、 No:即不启用自动装配。Autowire默认的值。不使用Autowire,引用关系显示声明,spring的reference也建议不用autoware,因为这会破坏模块关系的可读性。

2、 byName:通过属性的名字的方式查找JavaBean依赖的对象并为其注入。比如说类Computer有个属性printer,指定其autowire属性为byName后,Spring IoC容器会在配置文件中查找id/name属性为printer的bean,然后使用Seter方法为其注入。

3、 byType:通过属性的类型查找JavaBean依赖的对象并为其注入。比如类Computer有个属性printer,类型为Printer,那么,指定其autowire属性为byType后,Spring IoC容器会查找Class属性为Printer的bean,使用Seter方法为其注入。如果存在多个该类型bean,那么抛出异常,并指出不能使用byType方式进行自动装配;如果没有找到相匹配的bean,则什么事都不发生,也可以通过设置dependency-check="objects"让Spring抛出异常。

4、 constructor:通byType一样,也是通过类型查找依赖对象。与byType的区别在于它不是使用Seter方法注入,而是使用构造子注入。如果容器中没有找到与构造器参数类型一致的bean,那么抛出异常。

5、 autodetect:在byType和constructor之间自动的选择注入方式。通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。如果发现默认的构造器,那么将使用byType方式,否则采用
constructor。

6、 default:由上级标签<beans>的default-autowire属性确定。

注意:在配置bean时,<bean>标签中Autowire属性的优先级比其上级标签高,即是说,如果在上级标签中定义default-autowire属性为byName,而在<bean>中定义为byType时,Spring IoC容器会优先使用<bean>标签的配置。

 

posted @ 2018-08-02 09:07  梦里下起了雪  阅读(1520)  评论(0编辑  收藏  举报