Spring IOC_05 bean间引用

别名指代

<!-- 可以使用别名来指代本文件或外部文件的bean,并不会新注册一个bean,name:指向实际bean的id/name属性, alias:类似beanId-->
<alias name="person" alias="other" />

内部bean

<bean id="person" class="com.nanborone.bean.Person">
    <property name="address">
    	<!-- 忽略内部bean的标识、作用域,无法在容器中获得内部bean -->
        <bean class="com.nanborone.bean.Address">
            <property name="province" value="辽宁"/>
            <property name="city" value="沈阳"/>
            <property name="town" value="浑南"/>
        </bean>
    </property>
</bean>

外部bean引用

ref应用

<bean id="person" class="com.nanborone.bean.Person">
    <property name="address" ref="address"/>
    <!-- 与以下代码等效 -->
    <!-- <property name="address">
        <ref bean="address" />
    </property> -->
</bean>

idref引用

<!-- idref元素只是一种防错方法,在部署阶段就对bean进行校验,以确保bean一定存在 -->
<bean id="person" class="...">
    <property name="address">
        <idref bean="address"/>
    </property>
    <!-- 与以下代码等效 -->
    <!-- <property name="address" value="address"/> -->
</bean>

父子容器引用

<!-- 通过指定bean的parent属性可以创建一个引用到当前容器的父容器之中 -->
<!-- parent属性的值可以与目标bean的id或name属性一致,目标bean必须是当前引用目标bean容器的父容器 -->
<!-- 这个是在父容器中 -->
<bean id="accountService" class="com.something.SimpleAccountService" />

<!-- 这个是在子容器中 -->
<bean id="accountService" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="target">
        <ref parent="accountService"/> 
    </property>
</bean>

bean间继承

<!-- 可以添加abstract="true"表示当前bean是个抽象类,不能实例化 -->
<bean id="person1" class="com.nanborone.bean.Person">
    <property name="id" value="1"/>
    <property name="name" value="nanborone"/>
    <property name="male" value="true"/>
</bean>
<!-- parent:指定bean的配置信息继承于哪个bean -->
<bean id="person2" class="com.nanborone.bean.Person" parent="person">
    <property name="id" value="2"></property>
</bean>

bean间依赖

<!-- bean对象在创建的时候是按照bean在配置文件中声明顺序决定的,也可以使用depend-on标签来决定顺序 -->
<!-- 独立定义了depends-on属性的bean会优先销毁  -->
<bean id="book" class="com.nanborone.bean.Book" depends-on="person,address"></bean>
<bean id="address" class="com.nanborone.bean.Address"></bean>
<bean id="person" class="com.nanborone.bean.Person"></bean>

级联属性

<bean id="person" class="com.nanborone.bean.Person">
    <property name="address" ref="address" />
    <!-- 所有的组件路径(除了最后一个属性名字)不能为null -->
    <!-- 这个改变会实际影响beanId为address内部的数据,这样在其他ref address就会造成与预期不符的问题 -->
    <property name="address.province" value="北京" />
</bean>
发布了15 篇原创文章 · 获赞 0 · 访问量 369

猜你喜欢

转载自blog.csdn.net/weixin_44601009/article/details/104308987