使用此课程
@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
设置正确。这是好方法吗?如果没有,有什么更好的方法吗?怎么做?
答案 0 :(得分:82)
首先,public static
非final
字段邪恶。由于某种原因,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;
}
}