Java BeanPostProcessor混淆
我试图理解春天的BeanPostProcessor,但我不明白它是做什么的。BeanPostProcessor定义两个在这些点调用的方法是否正确:Java BeanPostProcessor混淆,java,spring,Java,Spring,我试图理解春天的BeanPostProcessor,但我不明白它是做什么的。BeanPostProcessor定义两个在这些点调用的方法是否正确: 在初始化之前(init方法或afterPropertieSet),但创建实例 在调用init方法或AfterPropertieSet方法之后 对吗?给出了第118页的示例和文本,进一步说明会令人困惑。我不认为我被允许从文本中复制更多的内容到问题中,但是注释和那里发生的事情很难理解 您是应该在您想要的bean上实现这个接口,还是应该在许多bean的
- 在初始化之前(init方法或afterPropertieSet),但创建实例
- 在调用init方法或AfterPropertieSet方法之后
@Autowired
注释
public class MyBean {
@Autowired MyOtherBean otherBean; // assigned by AutowiredAnnotationBPP
...
}
当您在Spring或应用于多个Bean子集的特性之上构建自己的框架时,此功能最为有用。您更有可能使用Spring提供的现有bean后处理器。Spring为您提供了许多后处理器,而不仅仅是
BeanPostProcessor
。而且,它们中的大多数都由弹簧本身使用。您在这个问题中提到的一个,用于(作为其名称状态)在实例化bean之后对其进行后期处理。Spring容器的行为如下所示:
- Spring实例化bean并调用其构造函数
- 初始化之前的后处理(对象bean、字符串bean名称)被调用
- bean初始化过程:
,@PostConstruct
(由afterPropertiesSet()
回调接口定义),自定义配置的初始化bean
方法init
被调用postProcessAfterInitialization(对象bean、字符串bean名称)
-扫描bean以查找AutowiredNotationBeanPostProcessor
注释以执行依赖项注入@Autowire
-检查是否存在所有依赖项 已注入标记为RequiredAnnotationBeanPostProcessor
@Required
-向bean注入servletcontextawarecomposor
实现ServletContext
接口ServletContextAware
- 实际上,诸如JSR-250
和@PostConstruct
之类的初始化/构造回调是使用后处理器实现的:@PreDestroy
CommonAnnotationBeanPostProcessor