当前位置: 首页 > news >正文

Spring之【Bean后置处理器】

目录

BeanPostProcessor

BeanPostProcessor的子接口

InstantiationAwareBeanPostProcessor

MergedBeanDefinitionPostProcessor

SmartInstantiationAwareBeanPostProcessor

DestructionAwareBeanPostProcessor

AutowiredAnnotationBeanPostProcessor

CommonAnnotationBeanPostProcessor 


BeanPostProcessor

  • Spring提供的扩展点
  • 提供了两个默认方法,将bean对象和beanName作为参数
  • Spring会在合适的时机执行对应的方法逻辑
package org.springframework.beans.factory.config;import org.springframework.beans.BeansException;
import org.springframework.lang.Nullable;public interface BeanPostProcessor {// bean初始化前@Nullabledefault Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {return bean;}// bean初始化后@Nullabledefault Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {return bean;}}

BeanPostProcessor的子接口

InstantiationAwareBeanPostProcessor

package org.springframework.beans.factory.config;public interface InstantiationAwareBeanPostProcessor extends BeanPostProcessor {// bean实例化前@Nullabledefault Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException {return null;}// bean实例化后default boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {return true;}@Nullabledefault PropertyValues postProcessProperties(PropertyValues pvs, Object bean, String beanName)throws BeansException {return null;}
}

MergedBeanDefinitionPostProcessor

package org.springframework.beans.factory.support;public interface MergedBeanDefinitionPostProcessor extends BeanPostProcessor {void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanType, String beanName);default void resetBeanDefinition(String beanName) {}}

SmartInstantiationAwareBeanPostProcessor

package org.springframework.beans.factory.config;public interface SmartInstantiationAwareBeanPostProcessor extends InstantiationAwareBeanPostProcessor {@Nullabledefault Class<?> predictBeanType(Class<?> beanClass, String beanName) throws BeansException {return null;}@Nullabledefault Constructor<?>[] determineCandidateConstructors(Class<?> beanClass, String beanName)throws BeansException {return null;}default Object getEarlyBeanReference(Object bean, String beanName) throws BeansException {return bean;}
}

DestructionAwareBeanPostProcessor

package org.springframework.beans.factory.config;public interface DestructionAwareBeanPostProcessor extends BeanPostProcessor {void postProcessBeforeDestruction(Object bean, String beanName) throws BeansException;default boolean requiresDestruction(Object bean) {return true;}}

AutowiredAnnotationBeanPostProcessor

  • 将该BeanPostProcessor对应的BeanDefinition存到容器中,也就是DefaultListableBeanFactory中的beanDefinitionMap集合中

  •  AbstractApplicationContext中refresh方法的registerBeanPostProcessors步骤中实例化并初始化好AutowiredAnnotationBeanPostProcessor对象,放入AbstractBeanfactory中的beanPostProcessors集合中

  •  解析@Autowired、@Value注解

CommonAnnotationBeanPostProcessor 

  • 将该BeanPostProcessor对应的BeanDefinition存到容器中,也就是DefaultListableBeanFactory中的beanDefinitionMap集合中

  •  AbstractApplicationContext中refresh方法的registerBeanPostProcessors步骤中实例化并初始化好AutowiredAnnotationBeanPostProcessor对象,放入AbstractBeanfactory中的beanPostProcessors集合中

  • 解析@Resource、@PostContruct、@PreDestroy

 

http://www.dtcms.com/a/297420.html

相关文章:

  • ELK Stack技术栈
  • 编译器-gcc/g++和自动化构建-make/Makefile
  • 软件工程:软件需求
  • Maximator增压器DLE 5-1-GG Artikelnr.1000015617
  • 走入Linux的世界:编辑器Vim
  • WPF高级学习(一)
  • 仙人掌cacti中的RCE案例
  • 虚拟直线阈值告警人员计数算法暑期应用
  • VoWiFi技术深度解析:架构、流程与演进
  • Oracle MCP本地部署测试
  • Oracle数据块8KB、OS默认认块管理4KB,是否需调整大小为一致?
  • CSS3新特性深度解析:Position Sticky粘性定位完整指南
  • FalconFS: Distributed File System for Large-Scale Deep Learning Pipeline——论文阅读
  • 【js(8)js深拷贝和浅拷贝】
  • 滚动提示组件
  • Vue2-VueRouter
  • [LeetCode]每日温度
  • 基于深度学习的图像分类:使用Vision Transformer(ViT)实现高效分类
  • 机器学习 KNN 算法,鸢尾花案例
  • Typecho多语言解决方案:从插件到主题的完整实现
  • 第5章 Excel公式与函数应用指南(1):公式和函数基础
  • C++ Qt6 CMake qml文件启动方式说明
  • 进阶向:基于Python的简易屏幕画笔工具
  • 萤石云替代产品摄像头方案萤石云不支持TCP本地连接-东方仙盟
  • Zabbix配置自动发现
  • 二分查找-268.丢失的数字-力扣(LeetCode)
  • 火候:烹饪的温度密码
  • DNF: Decouple and Feedback Network for Seeing in the Dark
  • Java线程基础面试复习笔记
  • 主要分布在背侧海马体(dHPC)CA1区域(dCA1)的时空联合细胞对NLP中的深层语义分析的积极影响和启示