@Configuration类中@PostConstruct的预期行为是什么?

我们正在重用一个用spring java-config(使用@Configuration)定义bean的项目,在一个这样的类中它有一个@PostConstruct init方法。

这里的预期行为是什么 – 何时调用此方法? 关于豆类,就是这样。 即,这个方法的行为就像配置类是一个bean(它实际上是一个?)

我们观察到的是,根据操作系统的不同,可以在@Autowired到配置类中的bean初始化之前调用它,因此它最终会使用不完整的依赖项。

即使对于@Configuration ,@ @PostConstruct按预期运行 – 在注入类的依赖项后调用它。 虽然这有点令人困惑(连同@Configuration类都是bean的事实),但它是正确的。

手头的问题是在spring-security-oauth的帮助下引入的一个隐藏的循环依赖 – 它是一个令人费解的配置集,超出了本讨论的范围。

因此,如果依赖bean仅在循环依赖性的情况下未完全初始化,则可以调用@PostConstruct 。 如果通过setter或field injection提供依赖关系,则不报告循环依赖关系,而是使用不完整的bean。

此处需要注意的是,循环依赖性处理似乎依赖于OS(这意味着一些JVM或JRE差异)。