首页 > 其他分享 >Spring的Bean工厂的后置处理器BeanFactoryPostProcessor执行流程

Spring的Bean工厂的后置处理器BeanFactoryPostProcessor执行流程

时间:2023-12-07 13:44:39浏览次数:24  
标签:定义 BeanFactory Spring 接口 Bean BeanFactoryPostProcessor

BeanFactoryPostProcessor作用

BeanFactoryPostProcessor是Spring框架中的一个重要接口,用于在BeanFactory加载Bean定义之后、实例化Bean之前对BeanFactory进行自定义修改和扩展。它允许开发人员在Spring容器加载配置文件并创建Bean实例之前对Bean定义进行操作,例如修改属性值、添加额外的元数据等。

BeanFactoryPostProcessor接口定义了一个方法:

void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;

这个方法接收的参数是ConfigurableListableBeanFactory类型,这是Spring容器的核心接口,也是BeanFactory接口的子接口。ConfigurableListableBeanFactory可以通过继承自BeanFactory的方法获取容器中所有的Bean,并支持像BeanPostProcessor这样的接口,从而增强bean的扩展能力。

在应用程序启动时,Spring容器会自动检测并调用所有实现了BeanFactoryPostProcessor接口的类的postProcessBeanFactory方法。开发人员可以利用这个方法来实现自定义的逻辑,对BeanFactory进行修改和扩展。

通过实现BeanFactoryPostProcessor接口,可以实现以下功能:

  1. 修改Bean定义:可以在BeanFactory加载Bean定义后,对Bean定义进行修改。例如,可以根据某些条件动态修改Bean的属性值、更改Bean的作用域等。
  2. 注册新的Bean定义:可以在BeanFactory加载Bean定义后,向BeanFactory中注册新的Bean定义。这样,可以动态地向Spring容器中添加新的Bean定义,从而实现动态扩展。
  3. 添加自定义元数据:可以向Bean定义中添加自定义的元数据,以供后续的处理器使用。这样,其他处理器或组件可以根据这些元数据进行相应的处理。

需要注意的是,BeanFactoryPostProcessor的实现类必须在Spring容器启动之前被注册到容器中,以确保在容器加载Bean定义时能够被正确调用。

总结起来,BeanFactoryPostProcessor是Spring框架中用于对BeanFactory进行自定义修改和扩展的接口。通过实现该接口,可以在BeanFactory加载Bean定义后、实例化Bean之前对BeanFactory进行修改,从而实现一些高级的自定义逻辑和功能扩展。

BeanFactoryPostProcessor在框架中的使用

BeanFactoryPostProcessor在Spring框架中有大量的使用案例。其中,最经典的案例莫过于PropertyPlaceholderConfigurer,它是Spring框架中的一个BeanFactoryPostProcessor实现类,可以在容器加载时,动态替换配置文件中的占位符,将占位符替换为真正的属性值。

public class PropertyPlaceholderConfigurer extends PlaceholderConfigurerSupport
	implements BeanFactoryPostProcessor, EnvironmentAware, EmbeddedValueResolverAware {

	/** Default placeholder prefix: "${" */
	public static final String DEFAULT_PLACEHOLDER_PREFIX = "${";

	/** Default placeholder suffix: "}" */
	public static final String DEFAULT_PLACEHOLDER_SUFFIX = "}";

    // 用来替换占位符的属性解析器
	private volatile PropertySourcesPlaceholderConfigurer pp;

	@Override
	public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
		processProperties(beanFactory, pp.getAppliedPropertySources());
		this.pp = null;
	}
    //...
}

除了PropertyPlaceholderConfigurer,Spring框架中还有大量的BeanFactoryPostProcessor实现类,比如CommonAnnotationBeanPostProcessor、AutowiredAnnotationBeanPostProcessor等等,它们都广泛应用于Spring中各种各样的场景中。

BeanFactoryPostProcessor的扩展举例

 

BeanFactoryPostProcessor的源码分析

 

标签:定义,BeanFactory,Spring,接口,Bean,BeanFactoryPostProcessor
From: https://www.cnblogs.com/xfeiyun/p/17881369.html

相关文章

  • spring 内嵌服务器相关
    Tomcat是一个Web服务器和Servlet容器,Servlet是一种用于处理HTTP请求的Java类,而Spring是一个框架,它提供了一系列模块和功能,包括Web模块,用于集成Tomcat和Servlet,以构建企业级应用程序。任何SpringWeb的entrypoint,都是servlet。自定义嵌入式容器参考:https://do......
  • Springboot项目实现过滤器功能
    核心类FilterFilter接口的全限定类名是javax.servlet.Filter,该接口有三个方法,分别是1、init(...):用于初始化Filter;2、doFilter(...):过滤请求和拦截响应信息的具体实现在这个方法里;3、destroy(...):Filter对象被销毁时触发,主要用于做一些收尾工作,如资源的释放等;FilterConfigF......
  • Spring Boot中的StringUtils:强大的工具类解析
    在实际的业务开发中,除了经常有针对对象的判断或操作以外,经常也会遇到的就是字符串的判断和操作。比如判断字符串是否为空、是否以某个字符结尾、去除头部和尾部的空白字符、字符的查找和替换。在Spring的核心包中存在这样一个类org.springframework.util.StringUtils,它提供了常见的......
  • Spring Boot:Java开发者的新伙伴
    SpringBoot是一款由Pivotal团队开发的开源框架,它是Spring框架的扩展,旨在简化新生成的Spring应用程序的配置和部署。SpringBoot让Spring应用的创建更容易,因为它消除了许多样板代码和配置文件的必要性。一、SpringBoot的核心概念1.自动配置SpringBoot的自动配置特性是其吸引人......
  • Spring的后置处理器BeanPostProcessor接口的执行流程
    BeanPostProcessor的设计目标主要是提供一种扩展机制,让开发者可以在SpringBean的初始化阶段进行自定义操作。这种设计理念主要体现了Spring的一种重要原则,即“开放封闭原则”。开放封闭原则强调软件实体(类、模块、函数等等)应该对于扩展是开放的,对于修改是封闭的。在这里,Spring容......
  • springboot监听器&拦截器【转】
    1.监听器https://www.cnblogs.com/elnimo/p/15641367.htmlCommandLineRunnerhttps://blog.csdn.net/qq_34531925/article/details/82527066https://www.cnblogs.com/yanxiaoguo/p/16167221.html2.拦截器https://blog.csdn.net/qq_50652600/article/details/127250413......
  • Spring入门03Spring核心概念、DI、IOC入门案例
    Spring核心概念IoC/DIIoC容器Bean IOC入门案例IoC入门案例思路分析  IoC入门案例实现   DI入门案例 DI入门案例思路分析DI入门案例实现  ......
  • Spring MVC 的路径匹配策略
    spring.mvc.pathmatch.matching-strategy=ant_path_matcher是一个配置项,用于设置SpringMVC的路径匹配策略。在这个例子中,它设置为使用AntPathMatcher(Ant风格的路径匹配器)。AntPathMatcher是一种基于Ant构建工具的路径匹配算法,它可以支持更灵活的路径模式匹配。通过将......
  • Spring Boot学习随笔-SpringBoot的引言,回顾传统SSM开发
    学习视频:【编程不良人】2021年SpringBoot最新最全教程第一章、传统SSM开发回顾以及问题Spring+SpringMVC+MybatisSSM实现一个简单功能员工添加、查询…SSM项目简单实现项目需求分析—>概要设计—>(库表设计)—>详细设计—>(验证库表正确性)—>编码(环境搭建+......
  • SpringBoot高级开发(8)SpringBoot使用Lettuce设置多个RedisTemplate实例
    copy from:https://xiaomozhang.github.io/2021/02/07/spring-boot-lettuce-multi-instance/项目pom配置使用SpringBoot集成Redis,只需要将spring-boot-starter-data-redis和commons-pool2加到依赖即可 xml<dependency><groupId>org.springframework.boot</groupId>......