Spring注解09——BeanPostProcessor后置处理器深度剖析

该系列文章主要学习 雷丰阳老师的《Spring注解驱动》课程总结。
原课程地址:课程地址

包括了自己阅读其他书籍《Spring揭秘》《Spring Boot 实战》等课程。

该系列文档会不断的完善,欢迎大家留言及提意见。

文章目录

    • 1. 写在之前
    • 2. BeanPostProcessor 是什么
    • 3. xxxBeanPostProcessor 源码分析
    • 4. Spring框架用该接口干嘛呢?
    • 总结

1. 写在之前

本篇会有一些源码的分析,如果暂时觉得没有用处,可以跳过该章节。

为什么要有 BeanPostProcessor 呢?

想要插手容器的管理过程,在实例化对象之前,对注册到容器中的 Bean 的基本信息做一些修改。相当于在容器进行第一道程序之前做一些额外的工作。

2. BeanPostProcessor 是什么

首先查看源码中的定义,主要是在 Bean 的实例化前后加上一些自己的业务逻辑,如果有多个 BeanPostProcessor 怎么办呢?

需要让 该实现类再实现 org.springframework.core.Ordered 接口,定义自己的顺序,会按照它们在容器中注册的顺序执行。

public interface BeanPostProcessor {
   

	/**
	 * 在 bean实例化之前通过该方法加入自己的 私货
	 */
	Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;

	/**
	 * bean 实例化之后再加上自己的 私货
	 */
	Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;

}

Spring 本身已经提供了现成的 BeanPostProcessor 实现类,如果没有特殊需求我们一般很少自定义 BeanPostProcessor。

CommonAnnotationBeanPostProcessor

AsyncAnnotationBeanPostProcessor

因此今天我们先来分析一下 Spring 给我提供的 Bean 是如何工作的。

3. xxxBeanPostProcessor 源码分析

先自定义一个 MyBeanPostProcessor ,该定义没有任何功能,只是输出了一些日志。

/**
 * 后置处理器,在初始化前后进行处理工作
 */
@Component 
public class MyBeanPostProcessor implements BeanPostProcessor, Ordered {
   

	@Override
	public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
   
		System.out.println("postProcessBeforeInitialization..." + beanName + "=>" + bean);
		return bean;
	}

	@Override
	public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
   
		System.out.println("postProcessAfterInitialization..." + beanName + "=>" + bean);
		return bean;
	}

	@Override
	public int getOrder() {
   
		return 3;
	}

}
<

你可能感兴趣的:(Spring注解驱动)