比方说,我在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定义的局部范围内的属性?
答案 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配置的方式。