Spring 内置BeanPostProcessor 的子子孙孙

2024-06-13 21:28

本文主要是介绍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 内置BeanPostProcessor 的子子孙孙的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1058470

相关文章

Java方法重载与重写之同名方法的双面魔法(最新整理)

《Java方法重载与重写之同名方法的双面魔法(最新整理)》文章介绍了Java中的方法重载Overloading和方法重写Overriding的区别联系,方法重载是指在同一个类中,允许存在多个方法名相同... 目录Java方法重载与重写:同名方法的双面魔法方法重载(Overloading):同门师兄弟的不同绝

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

Java数组动态扩容的实现示例

《Java数组动态扩容的实现示例》本文主要介绍了Java数组动态扩容的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1 问题2 方法3 结语1 问题实现动态的给数组添加元素效果,实现对数组扩容,原始数组使用静态分配

Java中ArrayList与顺序表示例详解

《Java中ArrayList与顺序表示例详解》顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构,:本文主要介绍Java中ArrayList与... 目录前言一、Java集合框架核心接口与分类ArrayList二、顺序表数据结构中的顺序表三、常用代码手动

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

Spring Boot Interceptor的原理、配置、顺序控制及与Filter的关键区别对比分析

《SpringBootInterceptor的原理、配置、顺序控制及与Filter的关键区别对比分析》本文主要介绍了SpringBoot中的拦截器(Interceptor)及其与过滤器(Filt... 目录前言一、核心功能二、拦截器的实现2.1 定义自定义拦截器2.2 注册拦截器三、多拦截器的执行顺序四、过

JAVA线程的周期及调度机制详解

《JAVA线程的周期及调度机制详解》Java线程的生命周期包括NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED,线程调度依赖操作系统,采用抢占... 目录Java线程的生命周期线程状态转换示例代码JAVA线程调度机制优先级设置示例注意事项JAVA线程

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

springboot的controller中如何获取applicatim.yml的配置值

《springboot的controller中如何获取applicatim.yml的配置值》本文介绍了在SpringBoot的Controller中获取application.yml配置值的四种方式,... 目录1. 使用@Value注解(最常用)application.yml 配置Controller 中