核心的 BeanPostProcessor
AutowiredAnnotationBeanPostProcessor
- 作用:处理
@Autowired 、@Value 、@Inject 等注解,实现依赖注入。
- 触发时机:
- postProcessBeforeInitialization:在 Bean 初始化之前,解析并注入依赖
- postProcessAfterInitialization:在 Bean 初始化之后,通常不执行额外逻辑
- 源码类:
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor
CommonAnnotationBeanPostProcessor
- 作用:处理 JSR-250 标准注解,如
@Resource 、@PostConstruct 、@PreDestory
@Resource :按名称或类型注入 Bean
@PostConstruct :在 Bean 初始化后执行
@PreDestory :在 Bean 销毁前执行
- 触发时机:
- postProcessBeforeInitialization:在 Bean 初始化之前,处理
@PostConstruct 注解的方法
- postProcessAfterInitialization:在 Bean 初始化之后,处理
@PreDestroy 注解的方法
- 源码类:
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor
RequiredAnnotationBeanPostProcessor
- 作用:检查
@Required 注解标注的属性是否已注入,未注入则抛出异常
- 触发时机:
- postProcessoBeforeInitialization:在 Bean 初始化前,检查
@Required 属性是否已注入
- 源码类:
org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor
ApplicationContextAwareProcessor
- 作用:处理
ApplicationContextAware 接口,向 Bean 注入 ApplicationContext
- 触发时机:
- postProcessorBeforeInitialization:在 Bean 初始化之前,调用
setApplicationContext() 方法
- 源码类:
org.springframework.context.support.ApplicationContextAwareProcessor
InitDestroyAnnotationBeanPostProcessor
- 作用:处理
@PostConstruct 和 @PreDestory 注解,分别在 Bean 初始化和销毁时执行
- 触发时机:
- postProcessBeforeInitialization :在 Bean 初始化之前,执行
@PostConstruct 注解的方法
- postProcessAfterInitialization:在 Bean 初始化之后,注册
@PreDestory 注解的方法,以便在 Bean 销毁时执行
InfrastructureAdvisorAutoProxyCreator
- 作用:为 Bean 创建代理,支持 AOP (面向切面编程)
- 触发时机:
- postProcessAfterInitialization:在 Bean 初始化之后,根据切面规则生成代理对象
- 源码类:
org.springframework.aop.framework.autoproxy.InfrastructureAdvisorAutoProxyCreator
PersistenceExceptionTranslationPostProcessor
- 作用:将持久化层异常(如 JPA、Hibernate 异常)转换为 Spring 的统一异常
- 触发时机:
- postProcessorBeforeInitialization:在 Bean 初始化之前,注册异常翻译器
- 源码类:
org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor
EventListenerMethodProcessor
- 作用:处理
@EventListener 注解,将标注的方法注册为事件监听器
- 触发时机:
- postProcessAfterInitialization:在 Bean 初始化之后,扫描并注册
@EventListener 方法
- 源码类:
org.springframework.context.event.EventListenerMethodProcessor
ScheduleAnnotationBeanPostProcessor
- 作用:处理
@Schedule 注解,将标注的方法注册为定时任务
- 触发时机:
- postProcessAfterInitialization:在 Bean 初始化之后,解析
@Scheduled 注解并注册定时任务
- 源码类:
org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor
ImportAwareBeanPostProcessor
- 作用:处理
@Import 注解导入的类,支持 ImportAware 接口
- 触发时机:
- postProcesssBeforeInitializtion:在 Bean 初始化之前,调用
setImportMetadata() 方法
- 源码类:
org.springframework.context.annotation.ImportAwareBeanPostProcessor
EmbeddedValueResolverAwareBeanPostProcessor
- 作用:
- 处理
EmbeddedValueResolverAware 接口,向 Bean 注入 StringValueResolver。
StringValueResolver 用于解析占位符(如 ${property})和 SpEL 表达式(如 #{expression})
- 触发时机:
- postProcessBeforeInitialization:在 Bean 初始化之前,调用
setEmbeddedValueResolver() 方法
- 源码类:
org.springframework.context.support.EmbeddedValueResolverAwareBeanPostProcessor
核心的BeanFactoryPostProcessor
ConfigurationClassPostProcessor
- 作用:处理
@Configuration ,解析 @ComponentScan 、@Import 、@Bean 等注解
- 触发时机:
- 在
BeanFactoryPostProcessor 阶段执行,负责加载配置类并注册 Bean 定义
- 不属于
BeanPostProcessor 的执行时机,而是在容器刷新时提前执行
- 源码类:
org.springframework.context.annotation.ConfigurationClassPostProcessor