当我拥有 All Args 构造函数时,我应该永远不要在 Spring Boot 中使用 @PostConstruct 吗?

问题描述

在out项目中,我们不使用setter或filed注入,我们只使用构造函数注入,我知道选项1.和2.都可以。

  • 在这种情况下,在构造函数中使用 bean 是否不安全

或者spring boot 2+做了一些东西,我应该更好地使用选项1。而不是2。我无法想象选项1会出错的情况

@Component
@ConfigurationProperties("config")
public class ServiceConfigProperties  {
    // .... some code
}
  1. 会不安全吗? - 但它看起来更好
@Component
public class Service {
    private boolean skipCheck;

    public Service(ServiceConfigProperties configProps) {
        this.skipCheck = configProps.isSkipCheck();
    }
}
  1. 不能不安全吗?
@Component
public class Service {
    private boolean skipCheck;
    private ServiceConfigProperties configProps;

    public Service(ServiceConfigProperties configProps) {
        this.configProps= configProps;
    }

    @postconstruct
    public void initConfig() {
        this.skipCheck= configProps.isSkipCheck();
    }   
}

解决方法

使用 a couple of caveats,在构造函数中与构造函数注入的 bean 交互是完全安全的。