spring中的ref和idref注入的區別
ref屬性和idref屬性都是可以用在constructor-arg元素和property元素中注入的。但是它們之間的注入還是有點區別的。
例如一下的程式碼:
<bean id="bean1" class="java.lang.String"> <constructor-arg index="0" value="test"/> </bean> <bean id="idRefBean1" class="com.cui.tch.chapter3.IdRefBean"> <property name="id"><idref bean="bean1"/></property> </bean>
實際上,idref注入的只是目標bean的id,而不是目標bean的例項,同時使用idref容器在部署的時候還會驗證這個名稱是否存在。
其實idref就跟value一樣,只是將某個字串注入到屬性或者建構函式中,只不過注入的是某個bean定義的id屬性值。
所以上面的程式碼的實際如下程式碼相同:
<bean id="bean1" class="java.lang.String"> <constructor-arg index="0" value="test"/> </bean> <bean id="idRefBean1" class="com.cui.tch.chapter3.IdRefBean"> <property name="id"><value>bean1</value></property> </bean>
但是ref則不同,ref元素是將目標bean定義的例項注入到屬性或者建構函式中,ref元素有三個屬性,區別如下:
1、local 只能指定與當前配置的Bean在同一個配置檔案中的Bean定義的名稱;
2、parent 只能指定位於當前容器的父容器中定義的物件引用;
3、bean 基本上通吃,即包括以上兩種情況都可以,所以,通吃情況下,直接使用bean來指定物件引用就可以了。 所以,上面那段配置程式碼中,beanID這個Bean中建構函式的引數name注入的只是“bea”這個字串;而其id屬性注入的則是testString這個字串。