一尘不染

Spring @Autowired和属性上的@Value不起作用

spring-boot

我想@Value在属性上使用,但我总是0(在int上)使用。
但是在构造函数参数上它起作用。

例:

@Component
public class FtpServer {

    @Value("${ftp.port}")
    private int port;

    public FtpServer(@Value("${ftp.port}") int port) {
        System.out.println(port); // 21, loaded from the application.properties.
        System.out.println(this.port); // 0???
    }
}

该对象是Spring管理的,否则构造函数参数将不起作用。

有谁知道是什么原因导致这种奇怪的行为?


阅读 784

收藏
2020-05-30

共1个答案

一尘不染

在构造对象之后进行场注入,因为显然容器无法设置不存在的属性。该字段将始终在构造函数中未设置。

如果要打印注入的值(或进行一些实际的初始化:)),则可以使用带有注释的方法@PostConstruct,该方法将在注入过程之后执行。

@Component
public class FtpServer {

    @Value("${ftp.port}")
    private int port;

    @PostConstruct
    public void init() {
        System.out.println(this.port);
    }

}
2020-05-30