弹簧应用程序上下文中的“回收”名称

时间:2009-06-05 15:55:46

标签: java spring

比方说,我在Spring应用程序上下文中有很多东西,看起来像那样

<bean name="foo.0001" class="com.example.MyClass">
    <property name="name" value="foo.name.0001"/>
    <property name="zap">
        <bean class="com.example.Other">
            <property name="name" value="foo.name.0001"/>
        </bean>
    </property>
    <property name="bar">
        <bean class="com.example.NextOther">
            <property name="name" value="foo.name.0001"/>
        </bean>
    </property>
</bean>

因此字符串foo.name.0001会多次出现在bean定义中。因为它是一个包含多个此配置块的较大系统,所以修改每个这些ID非常烦人。理想情况下,我只想在块中设置一次。是否有可能设置某种仅存在于bean定义的局部范围内的属性?

2 个答案:

答案 0 :(得分:3)

我不确定这在逻辑上是如何工作的,因为你仍然必须以某种方式引用该值以将其传递给嵌套bean。如果您担心多次定义它,可以查看Springs PropertyPlaceholderConfigurer。它将允许您进行以下操作:

<property name="bar">
   <bean class="com.example.NextOther">
      <property name="name" value="${foo.name.001}"/>
   </bean>
</property>

这将允许您定义一次,并从多个位置引用它。

答案 1 :(得分:1)

这取决于您希望为此付出多少努力,但您的要求可以通过spring自定义命名空间来实现。当你有很多相同的bean块,每个块都配置不同时,这些都是理想的选择。

基本上你要定义xml架构,然后编写一个bean定义解析器,根据需要设置bean。

请点击此处了解更多详情:

http://www.javaworld.com/javaworld/jw-02-2008/jw-02-springcomponents.html

这就是Spring安全性简化其xml配置的方式。