对其他Bean的引用(协作者)
ref元素是**或定义在元素内的最后一个元素。 在这里,您将一个bean的指定属性的值设置为对该容器管理的另一个bean(协作者)的引用。 引用的bean是要设置其属性的bean的依赖关系,并且在设置属性之前根据需要对其进行初始化。 (如果协作者是单例bean,则它可能已经由容器初始化了。)所有引用最终都是对另一个对象的引用。 范围和验证取决于您是通过bean还是父属性**指定另一个对象的ID或名称。
通过标记的bean属性指定目标bean是最通用的形式,它允许在同一容器或父容器中创建对任何bean的引用,而不管它是否在同一XML文件中。 bean属性的值可以与目标bean的id属性相同,也可以与目标bean的name属性中的值之一相同。 以下示例显示如何使用ref元素:
<ref bean="someBean"/>
通过parent属性指定目标Bean会创建对当前容器的父容器中Bean的引用。
parent属性的值可以与目标Bean的id属性或目标Bean的name属性中的值之一相同。
目标Bean必须位于当前容器的父容器中。 主要在具有容器层次结构并且要使用与父bean名称相同的代理将现有bean封装在父容器中时,才应使用此bean参考变量。 以下清单对显示了如何使用parent属性:
<!-- 在父上下文中 -->
<bean id="accountService" class="com.something.SimpleAccountService">
<!-- 根据需要在此处插入依赖项 -->
</bean>
<!-- 在子(后代)上下文中 -->
<!-- bean名称与父bean相同 -->
<bean id="accountService"
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target">
<ref parent="accountService"/> <!-- 注意我们如何引用父bean -->
</property>
<!-- 根据需要在此处插入其他配置和依赖项 -->
</bean>
ref元素的local属性在4.0 Bean XSD中不再受支持,因为它不再提供常规Bean引用上的值。 升级到4.0模式时,将现有的ref本地引用更改为ref bean。