Spring不仅为您提供了很多后处理器
BeanPostProcessor。另外,大多数都由Spring本身使用。您在此问题中提到的那个实例(如其名称所示)用于在实例化之后发布process
bean。Spring容器的行为如下:
Spring实例化bean调用其构造函数
postProcessBeforeInitialization(Object bean, String beanName)
叫做bean初始化过程:
@PostConstruct
,afterPropertiesSet()
(由InitializingBean
回调接口定义),自定义配置的init
方法postProcessAfterInitialization(Object bean, String beanName)
叫做
乍看起来,它看起来很复杂且令人难以理解,但是当您在Spring的顶部构建复杂的应用程序时,所有这些功能都是无价的。
例如,可能的场景(取自Spring本身):
AutowiredAnnotationBeanPostProcessor
-扫描bean寻找@Autowire
注解以执行依赖注入RequiredAnnotationBeanPostProcessor
-检查是否@Required
已注入所有标记为的依赖项。ServletContextAwareProcessor
-注入ServletContext
实现ServletContextAware
接口的bean- 实际上,初始化/ desctruction回调如JSR-250
@PostConstruct
和@PreDestroy
使用后处理器实现:CommonAnnotationBeanPostProcessor
当然,所有提到的后处理器必须按特定的顺序执行,但这是Spring的责任,以确保执行此后处理。



