如何在spring上下文中设置静态块中的静态字段值

时间:2015-11-10 15:57:37

标签: spring spring-mvc

我已查看此链接How to make spring inject value into a static field

但是,我的要求略有不同。我知道这是针对Spring的IoC,但我需要做这个解决方法。

package foo.package

@Controller  
public class SomeController{

 public static int var = -1;

 private String someStringField = null;
 // n- number of non-static fields
 /**
 * Constructor
 */
 public SomeController(){
    someStringField  = "some Value" ; // This is just for example.
 }


}

现在,我需要添加一个静态块,并使用Spring的上下文xml中的某个值设置静态字段var

根据链接中给出的代码段, 我可以用clinit代替方法名称吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

您还可以添加将初始化var。

的自动装配的setter
package foo.package

@Controller  
public class SomeController{

 public static int var = -1;

 private String someStringField = null;
 // n- number of non-static fields
 /**
 * Constructor
 */
 public SomeController(){
    someStringField  = "some Value" ; // This is just for example.
 }

 @Value("${your.property}")
 public void setVar(Integer var) {
     SomeController.var = var;
 }


}

答案 1 :(得分:0)

@Vladimir:

我想我找到了一个解决方法,虽然它不优雅。它是在上下文xml中完成的。

我发现问题的根本原因是<context:component-scan>

我在组件扫描后调用静态方法,即我正在做

<bean
        class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
<component scan>之后

。所以,我只是改变了顺序,而且设置正确。

我想,春天的上下文是扫描注释并实例化它们。撤销订单就行了。

非常感谢您的支持。 : - )