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

时间:2019-05-07 21:08:31

标签: spring

我有一个问题,其中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
}

2 个答案:

答案 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!
  }