首页 > 其他分享 >BeanPostProcessor&BeanFactoryPostProcessor傻傻分不清

BeanPostProcessor&BeanFactoryPostProcessor傻傻分不清

时间:2022-12-03 14:31:07浏览次数:44  
标签:BeanPostProcessor 初始化 傻傻 beanFactory 接口 bean BeanFactoryPostProcessor

最开始接触spring源码,被一堆的postProcessor搞晕了,翻译也不“包准”,有的翻译为【后置处理器】、有的翻译为【后置增强器】,这里姑且就翻译为处理器吧。


众所周知,在spring框架中,对象分两种,一种是普通bean,一种是容器本身,也就是BeanFactory,而通过两个接口的名字能很容易的识别。


BeanFactoryPostProcessor

BeanFactoryPostProcessor作为众多xxxBeanFactoryPostProcessor接口的父接口,它提供的功能就是处理与BeanFactory相关的内容

源码如下:

@FunctionalInterface
public interface BeanFactoryPostProcessor {

/**
* Modify the application context's internal bean factory after its standard
* initialization. All bean definitions will have been loaded, but no beans
* will have been instantiated yet. This allows for overriding or adding
* properties even to eager-initializing beans.
* @param beanFactory the bean factory used by the application context
* @throws org.springframework.beans.BeansException in case of errors
*/
void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;

}

从源码可以得知,只要实现接口,你就能拿到beanFactroy对象,然后对beanFactory里面的信息进行“为所欲为”的修改

因为此时所有的bean的定义信息(definitions)都已经被加载进beanFactory里面了,你可以对他们的属性进行覆盖或者添加,甚至可以提前初始化都可以。


相比于BeanFactoryPostProcessor,只是修改BeanFactory里面的内容,BeanPostProcessor就丰富的多了,因为BeanFactoryPostProcessor发生的时机是BeanFactory创建之后,bean初始化之前,而BeanPostProcessor伴随整个bean的生命周期,实例化前、实例化后、初始化前、初始化后等等

BeanPostProcessor

BeanPostProcessor作为众多xxxBeanPostProcessor接口的父接口,它提供的功能就是处理与bean相关的内容。作为根接口,

它提供了两个基本的方法postProcessBeforeInitialization和postProcessAfterInitialization,分别对应bean的初始化前、初始化后,而BeanPostProcessor有一堆的子接口,常见的有:

InstantiationAwareBeanPostProcessor

SmartInstantiationAwareBeanPostProcessor

MergedBeanDefinitionPostProcessor

spring的自动注入、事务、aop等功能都是通过不同的BeanPostProcessor来实现的。

其类图如下所示

BeanPostProcessor&BeanFactoryPostProcessor傻傻分不清_spring


BeanFactoryPostProcessor执行时机


它的执行时机是创建容器之后的invokeBeanFactoryPostProcessors

BeanPostProcessor&BeanFactoryPostProcessor傻傻分不清_spring_02




BeanPostProcessor执行时机

不同的子类执行的具体时机不同,但都是在finishBeanFactoryInitialization的过程中。






标签:BeanPostProcessor,初始化,傻傻,beanFactory,接口,bean,BeanFactoryPostProcessor
From: https://blog.51cto.com/u_15696939/5908549

相关文章

  • spring ioc 容器启动过程中 调用的核心方法 - invokeBeanFactoryPostProcessors
    invokeBeanFactoryPostProcessors:调用bean工厂的后置处理器,解析配置类,将配置类注册成Bean定义。调用所有的BeanDefinitionRegistryPostProcessor和BeanFactoryPostProce......
  • Nodejs:ESModule和commonjs,傻傻分不清
    最近写nodejs脚本的时候遇到了commonjs和ESModule的问题,正好之前用得稀里糊涂的,这次好好学习一下。ESModule导出仅导出namedexports:命名导出,每次可以导出一个或......
  • 四探循环依赖 → 当循环依赖遇上 BeanPostProcessor,爱情可能就产生了!
    开心一刻那天知道她结婚了,我整整一个晚上没睡觉,开了三百公里的车来到她家楼下,缓缓的抽了一支烟......天渐渐凉了,响起了鞭炮声,迎亲车队到了,那天披着婚纱的她很美,真的......
  • Nodejs:ESModule和commonjs,傻傻分不清
    最近写nodejs脚本的时候遇到了commonjs和ESModule的问题,正好之前用得稀里糊涂的,这次好好学习一下。ESModule导出仅导出namedexports:命名导出,每次可以导出一个或......
  • 压力传感器与压力变送器, “傻傻”分不清楚
    压力传感器,压力变送器认为是同一种产品吗?二者区别是什么呢?今天这篇文章为您分享压力传感器与压力变送器的区别。压力传感器是一种能感受压力,并按照一定的规律将压力信号转换......
  • 学编程这么久,还傻傻分不清什么是方法(method),什么是函数(function)?
    在编程语言中有两个很基础的概念,即方法(method)和函数(function)。如果达到了编程初级/入门级水平,那么你肯定在心中已有了初步的答案。也许在你心中已有答案了除去入参、返回值......
  • JWT 和 JJWT 还傻傻的分不清吗
    JWTs是JSON对象的编码表示。JSON对象由零或多个名称/值对组成,其中名称为字符串,值为任意JSON值。JWT有助于在clear(例如在URL中)发送这样的信息,可以被信任为不可读(即加密的)......
  • JWT 和 JJWT 还傻傻的分不清吗
    JWTs是JSON对象的编码表示。JSON对象由零或多个名称/值对组成,其中名称为字符串,值为任意JSON值。JWT有助于在clear(例如在URL中)发送这样的信息,可以被信任为不可读(即加密的)......
  • 后置处理器BeanPostProcessor
    BeanPostProcessor:回调机制,在bean的初始化前后做一些额外的处理,扩展功能。可以配置多个BeanPostProcessor实例,并且可以通过实现Ordered接口,设置order属性来控制这些Be......
  • JWT 和 JJWT 还傻傻的分不清吗
    JWTs是JSON对象的编码表示。JSON对象由零或多个名称/值对组成,其中名称为字符串,值为任意JSON值。JWT有助于在clear(例如在URL中)发送这样的信息,可以被信任为不可读(即加密的)......