实例化 class 时丢失 Spring @Value("${}")

Losing Spring @Value("${}") when instantiate class

我正在使用 SpringBoot 2.1.3 (Embedded Tomcat) + Thymeleaf 3.0 + Java 8.

我有一个简单的 class 像这样:

@Data
public class Machine {
   private Integer price;
   @Value("${settings.default}")
   private String settings;
}

还有一个简单的 application.properties:

settings.default=deafult

但是当我在代码中实例化 class 时:

Machine m = new Machine();
System.out.println(m.getSettings);

它returns 无效。显然,如果我这样做:

@Data
public class Machine {
   private Integer price;
   private String settings = "Default";
}

有效。或者,如果我在 class 方法中使用该值,它会再次有效。 怎么了?我可以这样做吗?

谢谢

A class 应使用构造型注释声明以使用 @Value

@Component
public class Machine {
   private Integer price;
   @Value("${settings.default}")  
   private String settings;
}

当然你必须自动装配机器class(Spring已经定义了bean),实例化一个新的对象不会得到值,所以要使用

@Service
public class FooService {
  @Autowire
  private Machine machine;

  public void fooMethod() {
    System.out.println(machine.getSettings()); // default
  }
}