Spring bean中BeanPostProcessor怎么用

发布时间:2021-08-12 12:47:55 作者:小新
来源:亿速云 阅读:386

这篇文章主要介绍了Spring bean中BeanPostProcessor怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

前言

之前有提到通过InitializingBean和Disposable等接口可以对bean的初始化和销毁做一些自定义操作,那么有一点要注意,那仅仅是在bean被容器实例化之后的操作,在spring的世界里,要想对实例化这个过程做点什么,作为一个普通业务的开发人员,显然不需要去继承ApplicationContext或者BeanFactory,因为spring container为我们提供了一些接口,让我们以插件的形式去扩展BeanFactory对bean的初始化操作,其中就有我们今天的主角——BeanPostProcessor(以下简称bpp)接口。

源码,先睹为快

Spring bean中BeanPostProcessor怎么用

这个用法很简单,它只有两个方法,我们实现自己的BeanPostProcessor,Spring能自动注册到容器中。

其中before方法是在bean实例化之后,属性设置之后但在初始化方法之前执行;after方法是在各种初始化方法之后执行。

说到这里可能有人会想,这跟生命周期中的其它初始化接口有啥区别?其它的初始化方法也可以修改bean啊,这个问题问得好,那么我们来说下这个接口与InitializingBean Disposable接口以及自定义的init destroy方法的本质区别

在这里有两种特殊的bpp不得不说,假设你需要自定义一个类似于@Autowire或者@Inject的注入功能的注解的时候(你可能会用到InjectionMetadata),普通的bpp可能就满足不了你的需要了,你可能用到两个特殊的bpp。

MergedBeanDefinitionPostProcessor(以下简称mbdpp)

InstantiationAwareBeanPostProcessor(以下简称iabpp)

他们都是继承自bpp,但在spring bean 创建的过程中切入点不同于普通的bpp。

InstantiationAwareBeanPostProcessor接口

Spring bean中BeanPostProcessor怎么用

 看注释

Spring bean中BeanPostProcessor怎么用

postProcessBeforeInstantiation方法

查阅AbstractAutowireCapableBeanFactory的createBean方法(这个方法是Spring容器创建bean的核心方法),可以看到,postProcessBeforeInstantiation是在bean实例化之前,postProcessAfterInstantiation是在实例化之后属性设置以及autowire注入之前,它一般是spring框架内部使用,但在这里大有可为,用postProcessBeforeInstantiation可以生成代理对象( 一般作法是让postProcessorBeforeInstantiation方法返回不为null,这样就会中断后续创建bean实例的过程,会以这个方法返回的对象作为bean实例),看源码:

Spring bean中BeanPostProcessor怎么用

postProcessPropertyValues方法

用postProcessPropertyValues 可以完成对属性的各种操作,注解中元数据的解析等,Spring的@Autowire注入,JSR330的@Inject以及JSR250的@Resource等注入操作都是通过这个方法完成。

这接口的用处在spring底层较多,有兴趣的同学可以翻阅源码,以下是两个比较典型的实现。

AutowiredAnnotationBeanPostProcessor
AbstractAutoProxyCreator

MergedBeanDefinitionPostProcessor接口

Spring bean中BeanPostProcessor怎么用

这个接口传入了一个RootBeanDefinition,这里允许我们修改bean的定义,@AutuwiredAnnotationBeanPostProcessor通过实现这个方法检查并注册需要注入的成员。

BeanFactoryPostProcessor(bfpp)

除了BeanPostProcessor还有一种想必大家都知道,那就是BeanFactoryPostProcessor

bfpp是作为beanFactory的一个很重要扩展插件,可以用来自定义BeanDefination的。它与bpp主要区别在于:

好了,说了这么多,来看下Spring创建bean的大致流程图,这里只标出了比较关键的节点

 Spring bean中BeanPostProcessor怎么用

感谢你能够认真阅读完这篇文章,希望小编分享的“Spring bean中BeanPostProcessor怎么用”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

推荐阅读:
  1. Spring Bean后处理器
  2. spring注入对象的方法和创建bean的步骤

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

spring bean beanpostprocessor

上一篇:redis数据丢失怎么办

下一篇:MySQL数据库有哪些登录方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》