我试图创建一个Spring bean并记录其生命周期的所有可能阶段。
但是我注意到在这种情况下,不会调用用@PostConstruct
注释的方法。
我想发生这种情况是因为BeanFactoryPostProcessor
和ApplicationContextAware
迫使容器尽早实例化它,但是我不完全知道。
能给我解释一下吗?
请在下面考虑一个代码段:
public class F implements BeanFactoryPostProcessor, ApplicationContextAware {
@PostConstruct
private void postConstruct() {
System.out.println("Hi from postContruct()");
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
System.out.println("Hi from setApplicationContext()");
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
System.out.println("Hi from postProcessBeanFactory()");
}
}
输出为:
Hi from setApplicationContext()
Hi from postProcessBeanFactory()
答案 0 :(得分:0)
尝试实现org.springframework.beans.factory.InitializingBean
而不是使用@PostConstruct
注释。 BeanFactoryPostProcessor
可能是一个特例,它在生命周期中发生得足够早,以至于生命周期注释尚未起作用。
我知道我的@PreDestroy
配置类上的BeanFactoryPostProcessor
也有同样的问题。使用org.springframework.beans.factory.DisposableBean
解决了这个问题。