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



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

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

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

理论上应该是可能的,因为我可以使用一个自定义类来完成这项工作,该类接收作为依赖项更新的bean,并在init方法中修改其属性。

我想知道Spring中是否有标准语法可以做到这一点

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

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

我将其作为外部依赖项导入,因此我没有修改此定义的选项。

当然,我可以在上下文中复制和粘贴这个定义并覆盖它。这对于像示例中这样非常简单的bean来说是可以的。问题是,依赖关系通常要复杂得多,并且它们可能在不同版本的库中发生变化。

我想要的是设置bean的一个属性".message",忽略所有其他细节。

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

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

此"代理"仅用于设置".message"的属性。

要做您想做的事情,SomeClass需要有一个setter。您只需要像往常一样注入bean,然后使用setter。使用注释会更容易,但使用XML也是可行的。

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

我相信这可以在导入上下文文件中使用org.springframework.beans.factory.config.MethodInvokingFactoryBean来完成。

使用示例中导入的定义:

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

消息可以在导入上下文文件中设置如下:

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetObject" ref="the.message" />
    <property name="targetMethod" value="setMessage" />
    <property name="arguments">
        <list>
            <value type="java.lang.String">This message was set in importing context file</value>
        </list>
    </property>
</bean>

最新更新