1. 程式人生 > >Spring中你不知道的注入方式

Spring中你不知道的注入方式

前言

在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定義屬性值 --> <beanclass="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