Spring中你不知道的注入方式
阿新 • • 發佈:2019-02-03
前言
在Spring配置檔案中使用XML檔案進行配置,實際上是讓Spring執行了相應的程式碼,例如:
- 使用<bean>元素,實際上是讓Spring執行無參或有參構造器
- 使用<property>元素,實際上是讓Spring執行一次setter方法
但Java程式還可能有其他型別的語句:呼叫getter方法、呼叫普通方法、訪問類或物件的Field等,而Spring也為這種語句提供了對應的配置語法:
- 呼叫getter方法:使用PropertyPathFactoryBean
- 呼叫類或物件的Filed值:使用FiledRetrievingFactoryBean
- 呼叫普通方法:使用MethodInvokingFactoryBean
注入其他Bean的屬性值
PropertyPathFactoryBean用來獲得目標Bean的屬性值(實際上就是呼叫getter方法返回的值),獲得的值可以注入給其他的Bean,也可以直接定義新的Bean。看如下的配置檔案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<bean
id= "person" class = "com.abc.Person" >
<property
name= "age" value= "30" />
<property
name= "son" >
<!--
使用巢狀Bean定義屬性值 -->
<bean class = "com.abc.service.Son" >
<property
name= "age" value= "11" />
</bean>
</property>
</bean>
<bean
id= "son2" class = "com.abc.service.Son" >
<!--
age屬性不是直接注入,而是將person中的son的age屬性賦值給son2的age屬性 -->
<property
name= "age" >
<!--
注意這裡使用的是PropertyPathFactoryBean -->
<bean
id= "person.son.age"
class = "org.springframework.beans.factory.config.PropertyPathFactoryBean" />
</property>
</bean>
|
其中Person類和Son類的屬性可以從配置檔案中看出,這不再給出。主程式如下:
1 2 3 4 5 6 7 |