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字段是邪恶的。 Spring 出于某种原因不允许注入(inject)此类字段。

您的解决方法是有效的,您甚至不需要 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/60487117/

相关文章:

java - 两个微服务之间的通信

spring - 为 spring boot 应用程序生成 war

java - 通过applicationContext.xml将spring bean注入(inject)@Controller

php - 防止php中的邮件注入(inject)拦截一些字符\r,\n,%0A,%0D

mysql - 使用 PDO 安全地将值插入 MySQL 表

java - 运行多个线程(每个线程都有自己的应用程序上下文)并正常关闭

spring - @RolesAllowed 与 @PreAuthorize 与 @Secured

java - Java 中可以进行代码注入(inject)吗?

c# - 通过 PublicKeyToken 防止外部程序集注入(inject)

Kotlin Dagger 2 在 Activity 和 Fragment 之间共享 ViewModel