Spring之【Bean后置处理器】

目录

BeanPostProcessor

BeanPostProcessor的子接口

InstantiationAwareBeanPostProcessor

MergedBeanDefinitionPostProcessor

SmartInstantiationAwareBeanPostProcessor

DestructionAwareBeanPostProcessor

AutowiredAnnotationBeanPostProcessor

CommonAnnotationBeanPostProcessor


BeanPostProcessor

  • Spring提供的扩展点
  • 提供了两个默认方法,将bean对象和beanName作为参数
  • Spring会在合适的时机执行对应的方法逻辑
java 复制代码
package org.springframework.beans.factory.config;

import org.springframework.beans.BeansException;
import org.springframework.lang.Nullable;

public interface BeanPostProcessor {

    // bean初始化前
	@Nullable
	default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
		return bean;
	}

    // bean初始化后
	@Nullable
	default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
		return bean;
	}

}

BeanPostProcessor的子接口

InstantiationAwareBeanPostProcessor

java 复制代码
package org.springframework.beans.factory.config;


public interface InstantiationAwareBeanPostProcessor extends BeanPostProcessor {

    // bean实例化前
	@Nullable
	default Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException {
		return null;
	}

    // bean实例化后
	default boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
		return true;
	}

    
	@Nullable
	default PropertyValues postProcessProperties(PropertyValues pvs, Object bean, String beanName)
			throws BeansException {

		return null;
	}
}

MergedBeanDefinitionPostProcessor

java 复制代码
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

java 复制代码
package org.springframework.beans.factory.config;

public interface SmartInstantiationAwareBeanPostProcessor extends InstantiationAwareBeanPostProcessor {

	@Nullable
	default Class<?> predictBeanType(Class<?> beanClass, String beanName) throws BeansException {
		return null;
	}

	@Nullable
	default Constructor<?>[] determineCandidateConstructors(Class<?> beanClass, String beanName)
			throws BeansException {

		return null;
	}

	default Object getEarlyBeanReference(Object bean, String beanName) throws BeansException {
		return bean;
	}
}

DestructionAwareBeanPostProcessor

java 复制代码
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
相关推荐
500842 小时前
昇腾 CANN 的五层架构,到底分了哪五层
java·人工智能·分布式·架构·ocr·wpf
辰海Coding2 小时前
MiniSpring框架学习-整合 IoC 和 MVC(NPC)
学习·spring·mvc
摇滚侠2 小时前
Java 零基础全套教程,File 类与 IO 流,笔记 177-178
java·开发语言·笔记
雨落在了我的手上2 小时前
初始java(十):类和对象(⼆)
java·开发语言
莫雪歌3 小时前
Java AI 应用开发实践:基于 Spring Boot 实现 Chat、Memory、RAG 与 Tool Calling
java·aigc
SmartBrain4 小时前
AI全栈开发(SDD):慢病管理系统工程级设计
java·大数据·开发语言·人工智能·架构·aigc
梦想CAD控件4 小时前
网页端对DWG图纸进行预览与批注(CAD轻量化)
java·前端·javascript
老毛肚4 小时前
Spring boot 特性和自写Reids组件
java·spring boot·后端
极光代码工作室4 小时前
基于SpringBoot的课程管理系统
java·springboot·web开发·后端开发
JustNow_Man4 小时前
【opencode】安装使用daytona沙箱插件
android·java·javascript