Spring Boot 2 - 在@Configuration 之前加载@Component
Posted
技术标签:
【中文标题】Spring Boot 2 - 在@Configuration 之前加载@Component【英文标题】:Spring Boot 2 - @Component loading before @Configuration 【发布时间】: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
所做的事情非常感兴趣。虽然你可以做到,但这可能是非常错误的。
【参考方案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 中可能会有所不同。以上是关于Spring Boot 2 - 在@Configuration 之前加载@Component的主要内容,如果未能解决你的问题,请参考以下文章
Spring Batch with Spring boot - 配置 JobRepositoryFactoryBean