我有一个问题,即 Spring@Value
注释在构造函数中不起作用。
我有这个Email
班级正在阅读一些与电子邮件相关的配置。
在构造函数中,如果我放置一个断点,则值为空
但是如果我调用这个sendEmail
方法,就会有值。
另一个类:
@Autowired
Email sender;
Run Code Online (Sandbox Code Playgroud)
Email
班级:
@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
}
Run Code Online (Sandbox Code Playgroud)
cvd*_*vdr 16
据我所知,值注入发生在构造函数调用之后。
尝试将您的构造函数更改为:
public Email(@Value("${TO_EMAIL}") String toEmail) {
this.toEmail = toEmail;
}
Run Code Online (Sandbox Code Playgroud)
小智 11
值注入发生在构造函数调用之后,要在您的情况下解决此问题,您可以将构造函数留空。并添加一个用“ @PostConstructor ”注释的方法。这样,将调用空构造函数,然后注入值,然后调用@PostConstructor方法。
我在使用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
}
}
Run Code Online (Sandbox Code Playgroud)
当我更改为以下代码后,它可以正常工作
@Autowired
public AppStartupRunner(Environment env) {
env.getProperty("key") //works!
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3808 次 |
最近记录: |