@Component public class Sample { @Value("${my.name}") public static String name; }
如果我尝试Sample.name,它始终为“ null”。所以我尝试了这个。
Sample.name
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领域是邪恶的。由于某种原因,Spring不允许注入此类字段。
public static
final
你的解决方法是有效的,甚至不需要getter / setter,private字段就足够了。另一方面,请尝试以下操作:
getter / setter,private
@Value("${my.name}") public void setPrivateName(String privateName) { Sample.name = privateName; }
(与@Autowired/一起使用@Resource)。但是给你一些建设性的建议:用privatefield和getter代替public staticfield 创建第二个类。
@Autowired/
@Resource
privatefield
getter
public staticfield