• spring bean parent属性详解


    必要条件:1、子bean必须与父bean保持兼容,也就是说子bean中必须有父bean定义的所有属性。

                  2、父bean必须是抽象bean或者定义lazy-init=true也就是不让bean工厂实例化该bean

    注:好多人将parent指向的类说是子类继承了父类,其实说法不正确,正确的说法应该是子bean父bean而不是子类父类,因为如果子bean指定的类已经继承了其他的类,那么在这里一样可以有一个父bean,(如果真像大家说的那样那不成多重继承了吗)

    1、如果父bean有class属性,而子bean没有,那么子bean的class就和父bean相同 例如:

     1 <beans>
     2 ...
     3 <bean id="testProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
     4         abstract="true">   //********(1)
     5         <property name="transactionManager" >
     6             <ref bean="transactionManager"/>
     7         </property>
     8         <property name="proxyTargetClass" value="true" />
     9 
    10         <property name="transactionAttributes">
    11             <props>
    12                 <prop key="*insert*">PROPAGATION_REQUIRED</prop>
    13                 <prop key="*select*">PROPAGATION_REQUIRED,readOnly</prop>
    14             </props>
    15         </property>
    16     </bean>
    17     
    18     <bean id="test" parent="testProxy">
    19         <property name="target">
    20             <ref bean="testit"/>  //******(2)
    21         </property>
    22     </bean>
    23 </beans>

      为了解决代码的低重用,我在testProxy里没有定义target属性,targe属性t的定义放在了外面一个bean里,这个bean继承了testProxy(parent),这样bean中parent中已注入的属性不需要再注入,在子bean中只需要注入还没有注入的属性即可!注意:也只能注入

    TransactionProxyFactoryBean

    中有的属性,重复了覆盖,但是不能注入其他任何属性

    2、如果父bean没有定义class属性,子bean必须定义class属性,这时候父bean实际上仅仅是一个纯模版或抽象bean,仅仅充当子定义的父定义。若要尝

    1 <beans>
    2 <bean id="parentBean">
    3     <property name="name"><value>parent</value></property>
    4     <property name="age"><value>1</value></property>
    5 </bean>
    6 <bean id="sunBean" class="SunBean"
    7       parent="parentBean" init-method="initialize">
    8     <property name="name"><value>override</value></property>
    9 </bean>

      试单独使用这样的parent bean(比如将它作为其他bean的ref属性而引用,或者直接使用这个parent bean的id调用getBean()方法),将会导致一个错误。这个父bean的功能也就是为了减少配置的书写而采用的,举例如下,如果有n个bean都要配置m个相同的属性,如果不采用父bean概念,将要配置这m个属性n次,采用父bean方式将这共同的m个属性配置在父bean中,而在这n个bean中都增加一个parent属性 指向那个bean就可以。(这里的m个属性也要满足必要条件,都在子bean对应的类中定义)

  • 相关阅读:
    164 Maximum Gap 最大间距
    162 Find Peak Element 寻找峰值
    160 Intersection of Two Linked Lists 相交链表
    155 Min Stack 最小栈
    154 Find Minimum in Rotated Sorted Array II
    153 Find Minimum in Rotated Sorted Array 旋转数组的最小值
    152 Maximum Product Subarray 乘积最大子序列
    151 Reverse Words in a String 翻转字符串里的单词
    bzoj3994: [SDOI2015]约数个数和
    bzoj 4590: [Shoi2015]自动刷题机
  • 原文地址:https://www.cnblogs.com/caoyc/p/5622986.html
Copyright © 2020-2023  润新知