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集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

Java 方法重载Overload常见误区及注意事项

《Java方法重载Overload常见误区及注意事项》Java方法重载允许同一类中同名方法通过参数类型、数量、顺序差异实现功能扩展,提升代码灵活性,核心条件为参数列表不同,不涉及返回类型、访问修饰符... 目录Java 方法重载(Overload)详解一、方法重载的核心条件二、构成方法重载的具体情况三、不构

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys