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

时间:2014-07-03 07:51:19

标签: java spring

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

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

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

1 个答案:

答案 0 :(得分:26)

即使对于@Configuration@PostConstruct也按预期运行 - 在注入类的依赖关系后调用它。虽然这有点令人困惑(加上@Configuration类是bean的事实),但这是正确的。

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

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

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