Spring Autowire自动装配

本文内容纲要:Spring Autowire自动装配

1.在应用中,我们常常使用标签为JavaBean注入它依赖的对象,同时也Spring为我们提供了一个自动装配的机制,在定义Bean时,标签有一个autowire属性,我们可以通过指定它来让容器为受管JavaBean自动注入依赖对象。的autowire属性有如下六个取值,他们的说明如下:

1、 No:即不启用自动装配。Autowire默认的值。之所以它的默认值为NO,那是因为这会破坏模块关系的可读性,spring的reference也建议不用autoware,原文如下: Note: as has already been mentioned, for larger applications, it is discouraged to use autowiring because it removes the transparency and the structure from your collaborating classes.

2、 byName:根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配。 如: 这样对于bean userManagerTarget的属性baseDAO,spring就会自动去引用同名的bean,也就是上面的声明和下面是等价的:

3、 byType:如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配;如果存在多个该类型bean,那么抛出异常,并指出不能使用byType方式进行自动装配;如果没有找到相匹配的bean,则什么事都不发生,也可以通过设置dependency-check="objects"让Spring抛出异常。

4、 constructor:与byType方式类似,不同之处在于它应用于构造器参数。如果容器中没有找到与构造器参数类型一致的bean, 那么抛出异常。 reference原文是: This is analogous to byType, but applies to constructor arguments. If there isn't exactly one bean of the constructor argument type in the bean factory, a fatal error is raised.

5、 autodetect:通过bean类的内省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。如果发现默认的构造器,那么将使用byType方式,否则采用 constructor。 原文如下: Chooses constructor or byType through introspection of the bean class. If a default constructor is found, byType gets applied.

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

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

小结:使用自动装配,配置文件简洁了许多。但是,自动装配并不是十全十美的,我们不论是使用byName还是byType的方法,Spring不一定就能很准确的为我们找到JavaBean依赖的对象。在这种情况下,你务必遵守javabean的命名规范,另外,如果使用自动装配,Spring配置文件的可读性也大大降低,我们不能很容易的看出个bean之间的依赖关系,这也在一定程度上降低了程序可维护性;也容易造成潜在的错误,比如说通过byName来装配,如果将属性 名字改了后,Spring就不会将其自动装配给Bean的属性了。

因此在使用自动装配时,应当权衡利弊,合理的与ref的方法相结合,尽量在降低工作量的同时,保证应用的可维护度。但是spring的reference还是不推荐在定义中用这个功能

本文内容总结:Spring Autowire自动装配

原文链接:https://www.cnblogs.com/cyjch/archive/2012/02/06/2340411.html

以上是 Spring Autowire自动装配 的全部内容, 来源链接: utcz.com/z/296105.html

回到顶部