我有一个问题,其中Spring @value注释在构造函数中不起作用
我有这个Email类,正在阅读一些与电子邮件相关的配置
在构造函数中,如果我把断点的值设为空
但是,如果我调用sendEmail方法,则有值
其他班级
@Autowired
Email sender;
电子邮件类别:
@Component
public class Email{
@Value("${TO_EMAIL}")
private String toEmail;
public Email() {
//here toEmail is null
}
public void sendEmail(String subject, String body) {
//here toEmail has value
}
答案 0 :(得分:1)
据我所知,值注入发生在构造函数调用之后。
尝试将您的构造方法更改为:
public Email(@Value("${TO_EMAIL}") String toEmail) {
this.toEmail = toEmail;
}
答案 1 :(得分:1)
我在使用 ApplicationRunner 时遇到了类似的问题
public class AppStartupRunner implements ApplicationRunner {
@Autowired
private Environment myEnv; //not work
@value(${xxx.xxx})
private String myValue //not work
@Autowired
public AppStartupRunner(Environment env) {
System.out.println(myEnv); //null
System.out.println(myValue); //null
}
}
我改成下面的代码后,完美运行
@Autowired
public AppStartupRunner(Environment env) {
env.getProperty("key") //works!
}