有了这个类
@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
设置正确。这是好方法还是不好?如果没有,有没有更好的方法?又该怎么做呢?
最佳答案
首先,public static
非final
字段是evil。 Spring 不允许注入(inject)这些字段是有原因的。
您的 workaround 是有效的,您甚至不需要 getter/setter,private
字段就足够了。另一方面,试试这个:
@Value("${my.name}")
public void setPrivateName(String privateName) {
Sample.name = privateName;
}
(与 @Autowired
/@Resource
一起使用)。但是给你一些建设性的建议:使用 private
字段和 getter 而不是 public static
字段创建第二个类。
关于Spring:如何向静态字段注入(inject)值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7253694/