如何在spring原型范围bean上设置静态字段

时间:2015-12-16 10:56:41

标签: java spring static prototype

我有一个简单的java类,如下所示:

public class foo
{
   private static String dateFormat;
   private static String otherStaticField;
   .... 
}

匹配的spring bean定义,xml格式,如下所示:

<bean id="foo" class="bar.foo" scope="prototype" />

我想要的是一种使用值设置静态字段的简单方法。

解决方案有效但不完全符合我的要求:

坏:
简单的属性定义,如下所示:

<bean id="foo" class="bar.foo" scope="prototype">
    <property name="dateFormat" value="someValue" />
    <property name="otherStaticField" value="someOtherValue" />
    ...
</bean>

显然这对原型bean来说是一个糟糕的解决方案,因为它会在每次创建实例时设置静态值。

丑陋的:
使用&#39; MethodInvokingBean&#39; bean设置一次每个值,如下所示:

<bean id="foo" class="bar.foo" scope="prototype" />
<bean class="org.springframework.beans.factory.config.MethodInvokingBean">
    <property name="targetClass" value="bar.foo" />
    <property name="targetMethod" value="setDateFormat" />
    <property name="arguments">
        <list>
            <value>someValue</value>
        </list>
    </property>
</bean>
<bean class="org.springframework.beans.factory.config.MethodInvokingBean">
    <property name="targetClass" value="bar.foo" />
    <property name="targetMethod" value="setOtherStaticField" />
    <property name="arguments">
        <list>
            <value>someOtherValue</value>
        </list>
    </property>
</bean>
...  

好处:?

* 小的设计考虑因素:我坚持在bean配置文件(Beans.xml)上实现它,因为我希望能够在整个中添加和删除这个bean一个地方。这就是为什么我不想在代码中单独设置这些静态字段的原因。

0 个答案:

没有答案