@Value 注释在构造函数中不起作用

use*_*026 9 spring

我有一个问题,即 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方法。


Vic*_*cky 6

我在使用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)