Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在spring原型范围bean上设置静态字段_Java_Spring_Static_Prototype - Fatal编程技术网

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

Java 如何在spring原型范围bean上设置静态字段,java,spring,static,prototype,Java,Spring,Static,Prototype,我有一个简单的java类,如下所示: public class foo { private static String dateFormat; private static String otherStaticField; .... } <bean id="foo" class="bar.foo" scope="prototype" /> xml格式的匹配SpringBean定义如下: public class foo { private static

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

public class foo
{
   private static String dateFormat;
   private static String otherStaticField;
   .... 
}
<bean id="foo" class="bar.foo" scope="prototype" />
xml格式的匹配SpringBean定义如下:

public class foo
{
   private static String dateFormat;
   private static String otherStaticField;
   .... 
}
<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来说,这是一个糟糕的解决方案,因为它会在每次创建实例时设置静态值

丑陋的人:
使用“MethodInvokingBean”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。这就是我不想在代码中单独设置这些静态字段的原因

为什么这些字段是静态的?另外,因为使用spring并不意味着所有东西都必须是Springbean,所以您仍然可以自己构造一个新对象。@M.Deinum将其视为众多功能中的一个。类“foo”实际上实现了“IFeature”接口,它允许我通过以下方式在代码中解析所有“IFeature”实现:“\u context.getBeansOfType(IFeature.class)”,如果需要设置它们,为什么这些东西是静态的?我已经有一个设计问题了……想想“dateFormat”的例子。我希望能够只在bean的上下文中更改它,而不更改代码。我不喜欢它在其他地方,比如应用程序设置文件,因为它只对这个bean有意义。。。