【问题标题】:Spring Boot 2 - @Component loading before @ConfigurationSpring Boot 2 - 在@Configuration 之前加载@Component
【发布时间】:2021-08-19 22:27:59
【问题描述】:

我有一个 Spring Boot 应用程序和两个来自我正在使用的不同 jar 的类,其中一个是 @Component,另一个是 @Configuration。
它们都有@PostConstruct 方法,基本上这是我的用例-> 我希望@Configuration 的@PostConstruct 在@Component 的@PostConstruct 之前运行。有没有可能以某种方式实现这一目标?
我尝试在@Component 上使用@DependsOn(引用@Configuration - 里面没有任何bean - 只有@PostConstruct),但它不起作用。
这是代码片段。
第一个文件:

@Configuration
public class MainConfig {
    @PostConstruct
    public void postConstruct() {
        // doSomething
    }
}

第二个文件。

@Component
public class SecondClass {
  @PostConstruct
  public void init() throws InterruptedException {
    // doSomething that depends on postConstruct from MainConfig
  } 
}

提前非常感谢

【问题讨论】:

  • 我从未见过带有后期构造例程的配置对象..
  • @mre 这在技术上是允许的,但相同;没见过。这是混合职责。
  • 我对你在MainConfig::postConstruct 所做的事情非常感兴趣。虽然你可以做到,但这可能是非常错误的。

标签: java spring-boot spring-boot-configuration


【解决方案1】:
@Configuration
public class MainConfig {

    public void postConstruct() {
        // doSomething
    }
}


@Component
public class SecondClass {

  @Autowired
  private MainConfig mainConfig;

  @PostConstruct
  public void init() throws InterruptedException {
    mainConfig.postConstruct();
    // doSomething that depends on postConstruct from MainConfig
  } 
}

【讨论】:

  • 这个不一样,你这里当然是在不同的地方触发了一个方法。
  • 这解决了我的问题,基本上如果你自动装配配置 Spring 将在调用 SecondClass 方法上的 PostConstruct 之前初始化配置。我还找到了解决这个问题的另一种方法,我将主配置的包添加到我的应用程序的 ComponentScan 中,这也有效
  • @AleksandarT 我不会依赖spring post-construct方法的顺序,除非spring文档明确保证。它可能适用于您的情况,但在生产环境或任何其他版本的 spring 或 java 中可能会有所不同。
猜你喜欢
  • 2022-01-14
  • 2019-10-08
  • 2020-02-20
  • 1970-01-01
  • 2011-03-19
  • 1970-01-01
  • 2018-11-22
  • 2012-08-07
  • 1970-01-01
相关资源
最近更新 更多