Spring:如何向静态字段注入(inject)值?

标签 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 设置正确。这是好方法还是不好?如果没有,有没有更好的方法?又该怎么做呢?

最佳答案

首先,public staticfinal 字段是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/

相关文章:

java - Tomcat8 使用 AbstractProtocol.pause 随机关闭

java - 用于数据库实体管理和 View 的管理 UI?

google-chrome-extension - Chrome 扩展中的 JavaScript 注入(inject)

c - 将入口点更改为PE文件中新添加的shellcode段后,如何恢复主进程?

javascript - 如何防止注入(inject)的 JavaScript 文件引用代码在我的网页中运行?

java - Spring 管理的数据源连接到具有域身份验证的 MS Sql 服务器

java - 从 Spring MVC 流式传输动态文件

java - 如何在 Spring 事务管理中调用自定义回滚方法?

javascript - Gulp 创建脚本以将 css 内联到头部

c - 如何使用 C/C++ 将代码注入(inject)正在运行的进程