Spring中的BeanFactoryPostProcessor

Spring 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。Spring的一大特性就是框架提供了很好的扩展,以供我们开发人员进行开发和定制自己想要的功能,今天我们就来介绍一下BeanFactoryPostProcessor以及其子接口这个后置处理器的相关内容。

BeanFactoryPostProcessor

  1. BeanFactoryPostProcessor,从名字我们可以略知一二,其是对BeanFactory的后置处理器。它的主要作用是在Spring容器创建Bean之前,对Bean的定义(BeanDefinition)进行修改或者添加属性或其他操作。这意味着,通过实现 BeanFactoryPostProcessor 接口,其可以在Bean实例化之前,对Bean的配置信息进行调整,从而改变Bean的行为。
  2. 我们可以通过 BeanFactoryPostProcessor 修改Bean的作用域(singleton、prototype等)、是否懒加载、属性值等。这在某些场景下非常有用,如读取外部配置文件,根据配置动态修改Bean的属性。
  3. 其接口方法是:void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;

其被调用时机如图所示:

在著名的RPC框架dubbo中的 ReferenceAnnotationBeanPostProcessor 就是实现改接口。

他会扫描Spring容器中所有的Bean,查找带有@Reference注解的服务引用,并为其创建代理对象。这个代理对象会拦截服务消费者对服务提供者的调用,并通过Dubbo框架实现远程调用。这样,服务消费者就可以像调用本地服务一样调用远程服务,而不需要关心远程调用的细节。

BeanDefinitionRegistryPostProcessor

  1. BeanDefinitionRegistryPostProcessor这个接口是 BeanFactoryPostProcessor的子接口。一般说来这个接口更通用更常用。
  2. 其接口方法是:void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException;
  3. BeanFactoryPostProcessor的借口操作的是BeanFactory,操作范围更广,能处理的事情更多。BeanDefinitionRegistryPostProcessor的方法更专注,只针对BeanDefinitionRegistry进行处理。
  1. 该方法的也是在bean实例化之前被调用执行,但是执行时机比BeanFactoryPostProcessor更早一些
  1. 多用在:
  • 动态注册BeanDefinition:可以根据配置文件、注解或其他条件动态注册BeanDefinition,从而实现动态加载 Bean
  • 修改BeanDefinition:可以修改已有的BeanDefinition,例如修改Bean的属性、依赖关系等;

执行顺序:

在dubbo中的ServiceAnnotationPostProcessor 就继承了 BeanDefinitionRegistryPostProcessor,BeanFactoryPostProcessor,用来实现对dubbo中的service进行解析和处理。

AotContributingBeanFactoryPostProcessor

这个扩展点是一个比较新的扩展点。AotContributingBeanFactoryPostProcessor是Spring框架中的一个扩展点,它是用于支持Spring应用程序的预编译技术(Ahead-of-Time Compilation)的。该技术可以将Spring应用程序的Bean预先编译成本地代码,以提高应用程序的启动速度和运行性能。

AotContributingBeanFactoryPostProcessor接口提供了一个方法:postProcessBeanFactory,该方法在Spring容器启动时被调用,用于为预编译器提供Spring应用程序的元数据。在该方法中,可以通过AotMetadataProvider接口提供Spring应用程序的元数据,例如Bean的定义、依赖关系等,从而支持应用程序的预编译。

Aot目前是一个比较新的技术,在我们平常的编码和使用中我们使用的比较少。所以我们大概了解一下即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值