Spring IOC 自动装配

自动装配

当一个对象中需要引用另外一个对象的时候,在之前的配置中我们都是通过property标签来进行手动配置的,其实在spring中还提供了一个非常强大的功能就是自动装配,可以按照我们指定的规则进行配置,配置的方式有以下几种:

<bean id="address" class="com.nanborone.bean.Address">
    <property name="province" value="辽宁" />
    <property name="city" value="沈阳" />
    <property name="town" value="浑南" />
</bean>
<bean id="book" class="com.nanborone.bean.Book">
    <property name="name" value="" />
    <property name="author" value="作者" />
    <property name="price" value="122" />
</bean>
<!-- 默认不自动装配,等同于defalult/no -->
<bean id="person" class="com.nanborone.bean.Person" />
<!-- 按照名字进行装配,以setXXX方法的XXX作为id去容器中查找组件,进行赋值,如果找不到则装配为null -->
<bean id="person1" class="com.nanborone.bean.Person" autowire="byName" />
<!-- 按照类型进行装配,以属性的类型作为查找依据去容器中找到这个组件,通过set方法注入,如果定义两个相同类型的bean,则直接报错 -->
<bean id="person2" class="com.nanborone.bean.Person" autowire="byType" />
<!-- 按照构造器进行装配,需要有一个构造方法,仅包含自动装配的bean的参数,否则不会生效 -->
<!-- 例如下例中装配address和一个book,如果没有定义address、book两个参数的构造则不能正确装配。如果是多一个参数,则全部自动装配为null,如果少一个参数,则按照构造方法定义的顺序装配后定义的,先定义装配为null -->
<!-- 如果定义两个相同类型的bean,会装配beanId与构造方法参数名一致的那个,否则装配null -->
<bean id="person3" class="com.nanborone.bean.Person" autowire="constructor" />

优先注入

<!-- 当自动装配时发现多个符合装配条件的bean,则指定primary为true的装配 -->
<bean id="address" class="com.nanborone.bean.Address" primary="true" />

移除自动装配

<!-- 当前bean不参与自动装配,不会以自动装配的形式注入到其他bean中,但不会影响显示引用 -->
<bean id="address" class="com.nanborone.bean.Address" autowire-candidate="false" />

模式匹配

<!-- 仅自动装配标识以Repository结尾的bean,如果在bean上显示定义了autowire-candidate属性,则不使用模式匹配 -->
<beans default-autowire-candidates="*Repository">
发布了13 篇原创文章 · 获赞 0 · 访问量 324

猜你喜欢

转载自blog.csdn.net/weixin_44601009/article/details/104310087
今日推荐