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

2022-09-01 01:09:06

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

此处的预期行为是什么 - 何时调用此方法?关于豆类,就是这样。也就是说,此方法的行为是否与配置类是Bean完全相同(它实际上是Bean吗?

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


答案 1

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

手头的问题是在spring-security-oauth的帮助下引入的隐藏的循环依赖关系 - 这是一组复杂的配置,超出了本讨论的范围。

因此,如果依赖 Bean 未完全初始化,则仅在循环依赖关系的情况下调用。如果通过 setter 或字段注入提供依赖关系,则不会报告循环依赖关系,而是使用不完整的 Bean。@PostConstruct

这里还需要注意的是,循环依赖关系处理似乎取决于操作系统(这意味着一些JVM或JRE差异)。


答案 2

推荐