《Spring Recipes》第一章笔记:Specifying Bean References

问题

向一个bean中注入另外一个bean。

解决方案:

使用<ref>标签。

注意:

1、可以在set注入中使用<ref>:
<bean id="sequenceGenerator"
class="com.apress.springrecipes.sequence.SequenceGenerator">
<property name="initial" value="100000" />
<property name="suffix" value="A" />
<property name="prefixGenerator">
<ref bean="datePrefixGenerator" />
</property>
</bean>

2、可以在构造函数注入中使用<ref>:
<bean id="sequenceGenerator"
class="com.apress.springrecipes.sequence.SequenceGenerator">
<constructor-arg ref="datePrefixGenerator" />
...
</bean>

3、Declaring Inner Beans:如果一个bean只会被使用一次,可以在<property>或者<constructor-arg>内被定义为内部bean。内部bean是匿名的,不能被引用,即使设置了id或者name属性,容器也会忽略此属性。
<bean id="sequenceGenerator"
class="com.apress.springrecipes.sequence.SequenceGenerator">
    <property name="initial" value="100000" />
    <property name="suffix" value="A" />
    <property name="prefixGenerator">
        <bean class="com.apress.springrecipes.sequence.DatePrefixGenerator">
            <property name="pattern" value="yyyyMMdd" />
        </bean>
    </property>
</bean>

4、可以使用<bean>的ref属性对<ref>进行简化:
<bean id="sequenceGenerator"
class="com.apress.springrecipes.sequence.SequenceGenerator">
    ...
    <property name="prefixGenerator" ref="datePrefixGenerator" />
</bean>

5、Spring2.0开始,可以使用p schema对<ref>进行简化:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="sequenceGenerator"
class="com.apress.springrecipes.sequence.SequenceGenerator"
    p:suffix="A" p:initial="1000000"
    p:prefixGenerator-ref="datePrefixGenerator" />
</beans>

在需要注入的属性名称后面,添加"-ref"即可进行注入。
6、如果需要注入的bean和被引用的bean在同一个配置文件中,并且被引用的bean定义了id,则可以用<ref>的local属性进行注入:
<bean id="sequenceGenerator"
class="com.apress.springrecipes.sequence.SequenceGenerator">
    <constructor-arg>
        <ref local="datePrefixGenerator" />     </constructor-arg>
    <property name="initial" value="100000" />
    <property name="suffix" value="A" />
</bean>

使用local属性,Spring IDE在编译期可以对其依赖的 JavaBean 进行验证。基于 local 方式,开发者能够使用到 XML本身提供的优势,而进行验证。

你可能感兴趣的:(spring,bean,references)