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

相关文章

Spring Boot整合Redis注解实现增删改查功能(Redis注解使用)

《SpringBoot整合Redis注解实现增删改查功能(Redis注解使用)》文章介绍了如何使用SpringBoot整合Redis注解实现增删改查功能,包括配置、实体类、Repository、Se... 目录配置Redis连接定义实体类创建Repository接口增删改查操作示例插入数据查询数据删除数据更

Java Lettuce 客户端入门到生产的实现步骤

《JavaLettuce客户端入门到生产的实现步骤》本文主要介绍了JavaLettuce客户端入门到生产的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录1 安装依赖MavenGradle2 最小化连接示例3 核心特性速览4 生产环境配置建议5 常见问题

Java使用Swing生成一个最大公约数计算器

《Java使用Swing生成一个最大公约数计算器》这篇文章主要为大家详细介绍了Java使用Swing生成一个最大公约数计算器的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下... 目录第一步:利用欧几里得算法计算最大公约数欧几里得算法的证明情形 1:b=0情形 2:b>0完成相关代码第二步:加

Java 的ArrayList集合底层实现与最佳实践

《Java的ArrayList集合底层实现与最佳实践》本文主要介绍了Java的ArrayList集合类的核心概念、底层实现、关键成员变量、初始化机制、容量演变、扩容机制、性能分析、核心方法源码解析、... 目录1. 核心概念与底层实现1.1 ArrayList 的本质1.1.1 底层数据结构JDK 1.7

Java Map排序如何按照值按照键排序

《JavaMap排序如何按照值按照键排序》该文章主要介绍Java中三种Map(HashMap、LinkedHashMap、TreeMap)的默认排序行为及实现按键排序和按值排序的方法,每种方法结合实... 目录一、先理清 3 种 Map 的默认排序行为二、按「键」排序的实现方式1. 方式 1:用 TreeM

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node