关于 Spring bean 生命周期初始化序列的困惑
Puzzle about Spring bean lifecycle initialize sequence
这是我的代码:
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
@Override
public void afterPropertiesSet() throws Exception {
CompatibleGroovyCompiler.init();
thriftClientProxyRefs = REF_SPLITTER.splitToList(ref);
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
}
据我了解,Spring应该按照
的顺序调用我的方法
setApplicationContext
postProcessBeanFactory
afterPropertiesSet
但我添加了一些调试打印,它显示
setApplicationContext
afterPropertiesSet
postProcessBeanFactory
有些事情让我觉得 CompatibleGroovyCompiler.init();
可能是造成这种情况的原因,所以我删除了那个电话,并得到了我期待的订单。
有人可以解释一下吗?
你的理解不完整。
一旦构建了 bean 并注入了所有依赖项,就会调用 afterPropertiesSet
方法。这适用于创建的每种类型的 bean。
你的 bean 是一个 BeanFactoryPostProcessor
,它也适用于那个,尽管这个 instance/bean 很早就创建了,因为处理 BeanFactory
需要它。
bean 在调用该方法之前尚未准备好,之后 bean 可以用作完全初始化的 BeanPostProcessor
。
这是我的代码:
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
@Override
public void afterPropertiesSet() throws Exception {
CompatibleGroovyCompiler.init();
thriftClientProxyRefs = REF_SPLITTER.splitToList(ref);
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
}
据我了解,Spring应该按照
的顺序调用我的方法setApplicationContext
postProcessBeanFactory
afterPropertiesSet
但我添加了一些调试打印,它显示
setApplicationContext
afterPropertiesSet
postProcessBeanFactory
有些事情让我觉得 CompatibleGroovyCompiler.init();
可能是造成这种情况的原因,所以我删除了那个电话,并得到了我期待的订单。
有人可以解释一下吗?
你的理解不完整。
一旦构建了 bean 并注入了所有依赖项,就会调用 afterPropertiesSet
方法。这适用于创建的每种类型的 bean。
你的 bean 是一个 BeanFactoryPostProcessor
,它也适用于那个,尽管这个 instance/bean 很早就创建了,因为处理 BeanFactory
需要它。
bean 在调用该方法之前尚未准备好,之后 bean 可以用作完全初始化的 BeanPostProcessor
。