Spring:如何为静态字段注入值?

时间:2011-08-31 07:12:05

标签: spring code-injection

使用此课程

@Component
public class Sample {

    @Value("${my.name}")
    public static String name;


}

如果我尝试Sample.name,它总是'null'。所以我尝试了这个。

public class Sample {

    public static String name;

    @PostConstruct
    public void init(){
        name = privateName;
    }

    @Value("${my.name}")
    private String privateName;

    public String getPrivateName() {
        return privateName;
    }

    public void setPrivateName(String privateName) {
        this.privateName = privateName;
    }  

}

此代码有效。 Sample.name设置正确。这是好方法吗?如果没有,有什么更好的方法吗?怎么做?

2 个答案:

答案 0 :(得分:82)

首先,public staticfinal字段邪恶。由于某种原因,Spring不允许注入这些字段。

您的变通方法有效,您甚至不需要getter / setter,private字段就足够了。另一方面试试这个:

@Value("${my.name}")
public void setPrivateName(String privateName) {
    Sample.name = privateName;
}  

(适用于@Autowired / @Resource)。但是为了给你一些建设性的建议:使用private字段和getter而不是public static字段创建第二个类。

答案 1 :(得分:0)

这是我的用于加载静态变量的示例代码

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class OnelinkConfig {
    public static int MODULE_CODE;
    public static int DEFAULT_PAGE;
    public static int DEFAULT_SIZE;

    @Autowired
    public void loadOnelinkConfig(@Value("${onelink.config.exception.module.code}") int code,
            @Value("${onelink.config.default.page}") int page, @Value("${onelink.config.default.size}") int size) {
        MODULE_CODE = code;
        DEFAULT_PAGE = page;
        DEFAULT_SIZE = size;
    }
}
相关问题