互动网门户网站建设,wordpress设置恢复,wordpress post data,抖音关键词查询工具目录 Spring 扩展点 #xff1a;PostProcess介绍PostProcess大纲文字明细使用方法示例Autowired 功能实现Resource 功能实现 后记 Spring 扩展点 #xff1a;PostProcess
介绍
Spring 核心做的事情其实很简单就是#xff1a;控制反转和依赖注入 也就是把 Class 解析为 Bea… 目录 Spring 扩展点 PostProcess介绍PostProcess大纲文字明细使用方法示例Autowired 功能实现Resource 功能实现 后记 Spring 扩展点 PostProcess
介绍
Spring 核心做的事情其实很简单就是控制反转和依赖注入 也就是把 Class 解析为 BeanDefinition 然后把 BeanDefinition 创建为 Bean 在这个过程中 Spring 提供了很多扩展点其中一个就是各种PostProcess 这篇文章就简单的分析一下各种PostProcess
PostProcess
大纲
这里整理了一张汇总的大纲图 青色的是创建BeanDefinition 红色的是创建Bean
文字明细
1.BeanDefinitionRegistryPostProcessor #postProcessBeanDefinitionRegistry 添加beanDefinition到上下文
2.BeanFactoryPostProcessor #postProcessBeanFactory 处理beanFactory的属性或者使用beanFactory
3.InstantiationAwareBeanPostProcessor #postProcessBeforeInstantiation 实例化前给一个根据Class对象创建实例的机会
3.1.BeanPostProcessor #postProcessAfterInitialization 3执行了才会执行这个 初始化后调用返回原始实例的包装实例
4.SmartInstantiationAwareBeanPostProcessor #determineCandidateConstructors 实例化阶段确定实例化使用的构造函数
5.MergedBeanDefinitionPostProcessor #postProcessMergedBeanDefinition 实例化后、属性赋值前对Bean定义进行处理 可获取Bean定义的内容 如注解内容等
6.InstantiationAwareBeanPostProcessor #postProcessAfterInstantiation 属性赋值前自定义属性注入实现 任何一个返回false就不在进行默认的属性赋值
7.InstantiationAwareBeanPostProcessor #postProcessProperties 属性赋值前对属性进行处理 可以解析出用于注入的属性供后续统一设置 或者直接对实例的属性进行设置
8.BeanPostProcessor #postProcessBeforeInitialization 属性赋值后、初始化前对实例进行处理 如设置系统属性
9.BeanPostProcessor #postProcessAfterInitialization 初始化后调用返回原始实例的包装实例
10.DestructionAwareBeanPostProcessor #postProcessBeforeDestruction 销毁前作用于Bean实例 如执行PreDestroy的方法
使用方法
首先大家先看上面的大纲和明细掌握各种PostProcess的大致作用 然后分析一个 PostProcess 实现就可以先看一下其实现的接口 把接口所对应的方法都列出来排序 就大致知道功能是怎么样实现的
示例
Autowired 功能实现
我们可以用上面的方法来试着分析下 Autowired 功能实现类 AutowiredAnnotationBeanPostProcessor
我们先来看下其实现的接口 根据上边的明细和顺序列出
4.SmartInstantiationAwareBeanPostProcessor #determineCandidateConstructors 实例化阶段确定实例化使用的构造函数
实际的作用指定带有Autowired的构造器作为实例化的构造器
5.MergedBeanDefinitionPostProcessor #postProcessMergedBeanDefinition 实例化后、属性赋值前对Bean定义进行处理 可获取Bean定义的内容 如注解内容等
实际的作用 解析Bean带有Autowired的字段和方法 属性名、属性类型AutowiredFieldElement 方法名、方法参数类型AutowiredMethodElement 并存入缓存 injectionMetadataCache
7.InstantiationAwareBeanPostProcessor #postProcessProperties 属性赋值前对属性进行处理 可以解析出用于注入的属性供后续统一设置 或者直接对实例的属性进行设置
实际的作用 获取缓存 injectionMetadataCache 遍历后反射注入
Resource 功能实现
我们可以用上面的方法再来试着分析下 Resource 功能实现类 CommonAnnotationBeanPostProcessor
看一下其实现的接口
根据上边的明细和顺序列出
5.MergedBeanDefinitionPostProcessor #postProcessMergedBeanDefinition 实例化后、属性赋值前对Bean定义进行处理 可获取Bean定义的内容 如注解内容等
实际作用是 解析Bean带有Resource的字段和方法 属性名、属性类型ResourceElement 方法名、方法参数类型ResourceElement 并存入缓存 injectionMetadataCache
7.InstantiationAwareBeanPostProcessor #postProcessProperties 属性赋值前对属性进行处理 可以解析出用于注入的属性供后续统一设置 或者直接对实例的属性进行设置
实际作用是获取缓存 injectionMetadataCache 遍历后反射注入
10.DestructionAwareBeanPostProcessor #postProcessBeforeDestruction 销毁前作用于Bean实例 如执行PreDestroy方法
实际作用是Bean销毁时执行PreDestroy方法
后记
希望大家之后遇到相关的问题可以试着用这个方法来分析一下 有其他心得也欢迎大家多多交流
另外有一个上面看到的功能就是 InitDestroyAnnotationBeanPostProcessor 这个类大家可以试着分析下 可以把分析结果写在评论里一起学习