0


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 自动配置详解
标签: spring java 云原生

本文转载自: https://blog.csdn.net/weixin_40972073/article/details/139610351
版权归原作者 阿提说说 所有, 如有侵权,请联系我们删除。

“Spring 内置BeanPostProcessor 的子子孙孙”的评论:

还没有评论