spring bean parent屬性詳解

2021-08-01 17:08:05 字數 2876 閱讀 1898

必要條件: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"

4abstract

="true"

>

//********(1)

5<

property

name

="transactionmanager"

>

6<

ref

bean

="transactionmanager"

/>

7property

>

8<

property

name

="proxytargetclass"

value

="true"

/>910

<

property

name

="transactionattributes"

>

11<

props

>

12<

prop

key="*insert*"

>propagation_required

prop

>

13<

prop

key="*select*"

>propagation_required,readonly

prop

>

14props

>

15property

>

16bean

>

1718

<

bean

id="test"

parent

="testproxy"

>

19<

property

name

="target"

>

20<

ref

bean

="testit"

/>

//******(2)

21property

>

22bean

>

23beans

>

為了解決**的低重用,我在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

>

5bean

>

6<

bean

id="sunbean"

class

="sunbean"

7parent

="parentbean"

init-method

="initialize"

>

8<

property

name

="name"

><

value

>override

value

>

property

>

9bean

>

試單獨使用這樣的parent bean(比如將它作為其他bean的ref屬性而引用,或者直接使用這個parent bean的id呼叫getbean()方法),將會導致乙個錯誤。這個父bean的功能也就是為了減少配置的書寫而採用的,舉例如下,如果有n個bean都要配置m個相同的屬性,如果不採用父bean概念,將要配置這m個屬性n次,採用父bean方式將這共同的m個屬性配置在父bean中,而在這n個bean中都增加乙個parent屬性 指向那個bean就可以。(這裡的m個屬性也要滿足必要條件,都在子bean對應的類中定義)

spring bean parent屬性詳解

必要條件 子bean必須與父bean保持相容,也就是說子bean中必須有父bean定義的所有屬性。父bean必須是抽象bean或者定義lazy init true也就是不讓bean工廠例項化該bean 注 好多人將parent指向的類說是子類繼承了父類,其實說法不正確,正確的說法應該是子bean父b...

spring bean parent屬性詳解

必要條件 1 子bean必須與父bean保持相容,也就是說子bean中必須有父bean定義的所有屬性。2 父bean必須是抽象bean或者定義lazy init true也就是不讓bean工廠例項化該bean 注 好多人將parent指向的類說是子類繼承了父類,其實說法不正確,正確的說法應該是子be...

spring bean parent屬性詳解

必要條件 1 子bean必須與父bean保持相容,也就是說子bean中必須有父bean定義的所有屬性。2 父bean必須是抽象bean或者定義lazy init true也就是不讓bean工廠例項化該bean 注 好多人將parent指向的類說是子類繼承了父類,其實說法不正確,正確的說法應該是子be...