Spring - 设置从不同上下文文件导入的bean的属性

时间:2014-10-23 08:51:49

标签: java spring

假设您在spring上下文文件中导入了一些无法修改的上下文文件。

有没有办法设置导入的bean的属性? 我不想从导入的上下文文件中复制和粘贴bean定义并修改它,因为这会在我的代码和外部库之间产生错误的依赖关系。

我只需要修改现有bean的一个属性。

理论上应该可以使用自定义类来接收bean作为依赖项进行更新并在init-method中修改其属性。

我想知道Spring中是否有标准语法来执行此操作。

例如,在library-context.xml中,有以下bean定义:

<bean id="the.message" class="com.someco.SomeClass">
  <property name="message" value="default message" />
</bean>

我将其作为外部依赖项导入,因此我无法修改此定义。

当然,我可以在我的上下文中复制并粘贴此定义并覆盖它。对于像示例中的bean那样非常简单的bean就可以了。 问题在于,依赖关系通常要复杂得多,而且可以在库的不同版本中进行更改。

我想要的是设置bean的属性&#34; the.message&#34;忽略所有其他细节。

我正在考虑使用类似的东西:

<bean id="myproxy" class="com.myapp.Proxy" init-method="copyProperties">
    <property name="proxied" value="the.message" />
    <property name="message" value="my message" />
</bean>

这个&#34;代理&#34;仅用于设置&#34; the.message&#34;。

的属性

2 个答案:

答案 0 :(得分:0)

要做你想做的事,SomeClass需要有一个setter。您可以像往常一样注入bean并使用该setter。使用注释会更容易,但也可以使用XML。

但是,请确保您意识到这样做会全局更改bean的值。如果有任何东西依赖于原始值,那将不再存在。

答案 1 :(得分:0)

我相信这可以在导入上下文文件中使用breakpoint来完成。

使用示例中的导入定义:

org.springframework.beans.factory.config.MethodInvokingFactoryBean

可以在导入上下文文件中设置

消息,如下所示:

<bean id="the.message" class="com.someco.SomeClass">