一尘不染

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

spring

@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设置正确。这是好方法吗?如果没有,还有什么更好的方法吗?以及如何做?


阅读 338

收藏
2020-04-11

共1个答案

一尘不染

首先,public staticfinal领域是邪恶的。由于某种原因,Spring不允许注入此类字段。

你的解决方法是有效的,甚至不需要getter / setter,private字段就足够了。另一方面,请尝试以下操作:

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

(与@Autowired/一起使用@Resource)。但是给你一些建设性的建议:用privatefieldgetter代替public staticfield 创建第二个类。

2020-04-11