spring中的ref和idref注入的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/h_025/article/details/81275725

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这个字符串。

猜你喜欢

转载自blog.csdn.net/h_025/article/details/81275725
今日推荐