当前位置: 首页 > 工具软件 > Autowire > 使用案例 >

spring自动注入之default-autowire-candidates、autowire-candidate、default-autowire、autowire的总结分析

空翼
2023-12-01

spring的xml配置关于自动配置的属性有四个default-autowire-candidates、autowire-candidate、default-autowire、autowire四个属性。

default-autowire-candidates和autowire-candidate是作用与注入者,default-autowire和autowire是作用于被注入者,什么是注入者,什么是被注入者,一下面为例:

public class Mi1 {
    public  Mi6 mi6;

   ....省略get和set方法 
}

==================对象分割线

public class Mi6 {
 

}

这里面Mi6称之为注入者,Mi1称之为被注入者。

 

default-autowire-candidates是beans上的属性,它是一个集合,告诉bean的容器,哪些可以做自动注入,哪些不可以,它支持按照bean的名称模糊匹配。

autowire-candidate是作用于单个bean标签上的,它只有false或true两个值,默认值是false,他表明了这个bean可以不可以被自动注入到别的bean。

default-autowir:自动注入类型,有四个值,不自动注入,按照bean的名称自动注入,按照bean的类型自动注入,按照构造参数注入,标签应用于beans上。

autowire:标签应用于bean上,功能和default-autowir一样。

 

下面将举例说明这四个标签的作用:

 

==================案例A说明========

案例A1:

<beans default-autowire-candidates="">

    <bean name="mi1" class="com.ansel.test.Mi1" autowire="byType"/>

    <bean name="mi6" class="com.ansel.test.Mi6" />

</beans>

案例A2:

<beans default-autowire-candidates="mi6*">

    <bean name="mi1" class="com.ansel.test.Mi1" autowire="byType"/>

    <bean name="mi6" class="com.ansel.test.Mi6" />

</beans>

在案例A1中,因为beans指定了default-autowire-candidates="",default-autowire-candidates的值并不会匹配mi6,所以即便mi1指定了按照类型注入,mi6也不会自动注入的。

在案例A2中,因为beans指定了default-autowire-candidates="mi6*",default-autowire-candidates的值会匹配mi6,所以mi6会自动注入的。

==================案例A说明结束========

==================案例B说明举例========

案例B1:

<beans>

    <bean name="mi1" class="com.ansel.test.Mi1" autowire="byType"/>

    <bean name="mi6" class="com.ansel.test.Mi6"  autowire-candidate="false" />

</beans>

案例B2:

<beans>

    <bean name="mi1" class="com.ansel.test.Mi1" autowire="byType"/>

    <bean name="mi6" class="com.ansel.test.Mi6"  autowire-candidate="true" />

</beans>

案例B1和案例A1的结果是一样的,案例B2和案例A2的结果是一样。

====================案例B说明举例结束==============

总结:

在被注入者指定 autowire="byType"时,autowire-candidate和default-autowire-candidates才起作用,如果是按照名称,则不起作用。

 

 

 类似资料: