Spring 内置BeanPostProcessor 的子子孙孙

Spring 框架已经实现了很多BeanPostProcessor的类,如下是关于BeanPostProcessor 的类图,图片过大,可以下载资源包看。

要能说清楚这些类,挺难,我也不知道怎么写,这几个类都分布在不同的包中,我感觉按包来分类说更清楚一些,这篇文章只大概介绍各个类的作用,具体源码后面再说。

spring-context

  • ApplicationContextAwareProcessor
    对Spring中的实现了指定Aware接口的Bean进行处理,将应用上下文ApplicationContext和其他环境信息放入Bean中,这些Aware接口包括:EnvironmentAware、
    EmbeddedValueResolverAware、ResourceLoaderAware、ApplicationEventPublisherAware、MessageSourceAware、
    ApplicationStartupAware、ApplicationContextAware
  • BeanValidationPostProcessor
    使用JSR-303(即使用了Hibernate Validator验证)对Spring 管理的Bean进行初始化前后的验证
  • ApplicationListenerDetector
    用来检测实现了ApplicationListener接口的顶级类和内部类(内部类实现了ApplicationListener接口)
  • CommonAnnotationBeanPostProcessor
    一个很重要的类,用来识别@Resource、@PostConstruct、@PreDestroy注解
  • ScheduledAnnotationBeanPostProcessor
    用来解析@Scheduled注解,处理定时任务
  • MethodValidationPostProcessor
    使用JSR-303在方法级进行验证,使用AOP实现
  • LoadTimeWeaverAwareProcessor
    将类加载到JVM中时动态地转换成字节码文件
  • AsyncAnnotationBeanPostProcessor
    解释带有@Async注解的异步方法
  • ScriptFactoryPostProcessor
    支持Spring 使用脚本文件(Groovy、JavaScript)来生成Bean
  • 内部类BeanPostProcessorChecker
    用来验证创建的Bean是否符合BeanPostProcessors
  • 内部类ImportAwareBeanPostProcessor
    处理实现了ImportAware接口的Bean,将注解元数据(通常通过@Import导入)传递给实现了ImportAware接口的Bean

spring-bean

  • InstantiationAwareBeanPostProcessor
    这是一个接口,主要在Spring内部使用,提供额外接口允许改变Bean的属性设置
  • SmartInstantiationAwareBeanPostProcessor
    Spring内部接口,额外提供预测Bean类型、确定实例化Bean的构造函数、在处理循环引用时提供获取提前bean引用的能力
  • DestructionAwareBeanPostProcessor
    接口,自定义Bean销毁前的回调处理,比如进行资源清理等
  • InitDestroyAnnotationBeanPostProcessor
    用来处理@PostConstruct、@PreDestroy注解,框架只有一个实现CommonAnnotationBeanPostProcessor
  • MergedBeanDefinitionPostProcessor
    接口,用来处理BeanDefinition的合并
  • InstantiationAwareBeanPostProcessorAdapter
    接口,在5.3中标注为过期,建议直接使用SmartInstantiationAwareBeanPostProcessor
  • RequiredAnnotationBeanPostProcessor
    5.3中已经过期,用来解析@Required
  • AutowiredAnnotationBeanPostProcessor
    用来解析@Autowired、@Value和@Lookup注解

spring-aop

  • AbstractAutoProxyCreator
    用来自动创建AOP代理的抽象类,子类可以制定策略是否要代理bean
  • AbstractAdvisingBeanPostProcessor
    抽象类,用于Bean创建过程中集成切面(Advice)和顾问(Advisor)
  • AdvisorAdapterRegistrationManager
    用来管理Advisor适配器注册的类
  • BeanNameAutoProxyCreator
    通过名称来决定是否自动创建AOP代理
  • AbstractAdvisorAutoProxyCreator
    抽象类,根据Advisor自动创建AOP代理,子类可以重写findCandidateAdvisors()方法,自定义创建策略,重写shouldSkip方法,排除自动代理对象
  • AbstractBeanFactoryAwareAdvisingPostProcessor
    抽象类,提供了BeanFactory感知
  • DefaultAdvisorAutoProxyCreator
    自动创建代理的实现类
  • AspectJAwareAdvisorAutoProxyCreator
    AbstractAdvisorAutoProxyCreator的子类,公开了当前AspectJ的调用上下文,并根据AspectJ优先级进行排序
  • AnnotationAwareAspectJAutoProxyCreator
    能够处理所有AspectJ相关的注解,并自动织入

spring-tx

  • BootstrapContextAwareProcessor

    用来将BootstrapContext传递给实现BootstrapContextAware接口的Bean

  • PersistenceExceptionTranslationPostProcessor

    自动处理异常转换,通过AOP实现,将低级别异常转换为DataAccessException

spring-jms

  • JmsListenerAnnotationBeanPostProcessor
    用来解析注解@JmsListener,创建JmsListenerContainerFactory

spring-orm

  • PersistenceAnnotationBeanPostProcessor
    用来处理@PersistenceUnit 和 @PersistenceContext注解,根据注解注入JPA资源EntityManagerFactory 和 EntityManager

作者其他文章推荐:

基于Spring Boot 3.1.0 系列文章

  1. Spring Boot 源码阅读初始化环境搭建
  2. Spring Boot 框架整体启动流程详解
  3. Spring Boot 系统初始化器详解
  4. Spring Boot 监听器详解
  5. Spring Boot banner详解
  6. Spring Boot 属性配置解析
  7. Spring Boot 属性加载原理解析
  8. Spring Boot 异常报告器解析
  9. Spring Boot 3.x 自动配置详解
相关推荐
小猪咪piggy7 小时前
【微服务】(1) Spring Cloud 概述
java·spring cloud·微服务
lkbhua莱克瓦247 小时前
Java基础——面向对象进阶复习知识点8
java·笔记·github·学习方法
m0_736927047 小时前
Spring Boot自动配置与“约定大于配置“机制详解
java·开发语言·后端·spring
GL-Yang8 小时前
2025年-集合类面试题
java·面试
你不是我我8 小时前
【Java 开发日记】我们来说一说 Redisson 的原理
java·开发语言
李憨憨8 小时前
Java处理大型 Excel 文件(超过 100 万行)难题
java
三坛海会大神5558 小时前
k8s(十)Helm详解
云原生·容器·kubernetes
老K的Java兵器库8 小时前
Collections 工具类 15 个常用方法源码:sort、binarySearch、reverse、shuffle、unmodifiableXxx
java·开发语言·哈希算法
武子康9 小时前
Java-153 深入浅出 MongoDB 全面的适用场景分析与选型指南 场景应用指南
java·开发语言·数据库·mongodb·性能优化·系统架构·nosql
K_i1349 小时前
Kubernetes流量管理:从Ingress到GatewayAPI演进
云原生·容器·kubernetes