实例化类时丢失Spring @Value(“ $ {}”)

时间:2019-06-09 19:48:40

标签: spring-boot application.properties

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

我有一个像这样的简单班级:

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

还有一个简单的application.properties

settings.default=deafult

但是当我仍然在代码中实例化该类时:

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

它返回null。如果可以的话,这很明显:

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

它可以工作。或者,如果我在类方法中使用该值,它将再次起作用。 怎么了?我可以做类似的事情吗?

谢谢

1 个答案:

答案 0 :(得分:0)

应使用构造型注释声明类,以使用@Value

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

当然,您必须自动装配Machine类(Spring已定义了bean),实例化一个新的Object不会获得该值,因此要使用

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

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