首页 > 编程语言 >五、Spring源码学习之postProcessBeanFactory方法

五、Spring源码学习之postProcessBeanFactory方法

时间:2024-03-23 19:01:02浏览次数:17  
标签:BeanPostProcessor 实例 beanFactory Spring postProcessBeanFactory 应用程序 bean 源码

简介

在应用程序上下文完成其标准初始化后,修改其内部的BeanFactory。此时,所有的bean定义都已经加载完成,但还没有任何bean被实例化。这允许在某些ApplicationContext实现中注册特殊的BeanPostProcessor等。

  • 在应用程序上下文的初始化过程中,会经历多个阶段。其中,一个关键阶段是加载bean定义。这些定义描述了应用程序中需要创建哪些bean,以及这些bean的属性和依赖关系。一旦所有的bean定义都加载完成,但尚未创建任何bean实例时,提供了一个时机来修改应用程序上下文的内部BeanFactory。
  • 这个时机特别重要,因为它允许你在bean实例化之前,注册一些特殊的BeanPostProcessor。BeanPostProcessor是Spring框架中的一个重要概念,它允许开发者在bean的生命周期中的特定点执行自定义逻辑。例如,你可以在bean创建之前或之后执行一些操作,或者在bean的属性设置之后执行一些操作。
  • 在某些ApplicationContext的实现中,可以利用这个时机来注册这些特殊的BeanPostProcessor。这通常是通过编程方式在bean定义加载后、bean实例化前添加BeanPostProcessor到上下文的BeanFactory中。这样,当后续的bean开始实例化时,这些BeanPostProcessor就会被自动调用,从而能够影响或修改bean的创建过程。

postProcessBeanFactory()方法

protected void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {
	//提供子类实现
}

AbstractRefreshableWebApplicationContext#postProcessBeanFactory()方法

protected void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {
		//增加ServletContextAwareProcessor后置处理器
		beanFactory.addBeanPostProcessor(new ServletContextAwareProcessor(this.servletContext, this.servletConfig));
		//忽略一些依赖接口 并且实现了下面这两个接口的类需要 ServletContextAwareProcessor来处理
		beanFactory.ignoreDependencyInterface(ServletContextAware.class);
		beanFactory.ignoreDependencyInterface(ServletConfigAware.class);
		//注册bean在web应用程序中的作用域以及解析作用域的工厂
		WebApplicationContextUtils.registerWebApplicationScopes(beanFactory, this.servletContext);
		//注册ServletContext 属性,其他 Web 环境相关的 Bean
		WebApplicationContextUtils.registerEnvironmentBeans(beanFactory, this.servletContext, this.servletConfig);
	}

标签:BeanPostProcessor,实例,beanFactory,Spring,postProcessBeanFactory,应用程序,bean,源码
From: https://blog.csdn.net/weixin_44877172/article/details/136915213

相关文章

  • Java毕业设计-基于SSM框架的在线课堂系统项目实战(附源码+论文)
    大家好!我是岛上程序猿,感谢您阅读本文,欢迎一键三连哦。......
  • 毕业设计:基于SSM的电影购票系统(源码+论文)
    本项目以SSM框架为开发技术,实现了一个电影购票系统。电影购票系统的主要使用者分为管理员;首页、个人中心、用户管理、电影类型管理、放映厅管理、正在上映管理、即将上映管理、系统管理、订单管理,用户前台;首页、正在上映、即将上映、电影资讯、个人中心、后台管理、客服等功能......
  • 基于物联网的智能家居监测与控制系统(附源码+全套资料)
        本设计是基于物联网的OneNET云平台和TCP/IP网络通信设计的具有低成本高效率的智能家居控制系统。该系统通过手机APP与终端服务器设备相结合的方式进行搭建。手机APP采用C++语言通过QT开发,终端服务器设备采用ARM-Cortex_A9开发板作为服务器,M0开发板模拟温湿度数据的......
  • MyBatis3源码深度解析(二十)动态SQL实现原理(一)动态SQL的核心组件
    文章目录前言第八章动态SQL实现原理8.1动态SQL的使用8.1.1\<if>8.1.2<where|trim>8.1.3<choose|when|otherwise>8.1.4\<foreach>8.1.5\<set>8.2SqlSource组件&BoundSql组件8.3LanguageDriver组件8.3.1XMLLanguageDriver8.3.2RawLanguageDriver8.4Sq......
  • 城管智慧执法系统源码有演示,自主研发,功能完善,正版授权,可商用上项目。
     城管智慧执法系统源码有演示,自主研发,功能完善,正版授权,可商用上项目。   一套数字化的城管综合执法办案系统源码,提供了案件在线办理、当事人信用管理、文书电子送达、沿街店铺视频智能分析等功能,全面赋能执法队员,提高执法队员办案效率。手机端实现考勤、数据采集、上......
  • 【附源码】java数字家谱管理系统(ssm毕业设计+maven+vue+计算机专业)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义标题:数字家谱管理系统的选题背景及其意义随着信息技术的快速发展,数字化已经成为现代社会的一种趋势。在传统文化的传承与保护方面,数字技术的应用尤为重要。家谱作......
  • 【附源码】java双端的在线学习考试平台(ssm毕业设计+maven+vue+计算机专业)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在信息技术日益发展的今天,教育行业也在经历着前所未有的变革。传统的面对面教学模式逐渐向线上教育模式转变,这一趋势在全球范围内愈发明显。尤其是在全球......
  • SpringBoot项目的pom.xml基础依赖
    <?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache......
  • Golang: Redislock源码分析
    Golang:Redislock源码分析源码https://github.com/bsm/redislock实现Lua脚本obtain.lua--obtain.lua:arguments=>[value,tokenLen,ttl]--Obtain.luatrytosetprovidedkeys'swithvalueandttliftheydonotexists.--Keyscanbeoverrideniftheyal......
  • Spring Security 中的 BCryptPasswordEncoder
    一、使用BCryptPasswordEncoder加密的值可以解出来吗SpringSecurity中的BCryptPasswordEncoder是一种单向加密算法,它是为了安全性考虑而设计的,因此无法从加密后的密码值"解密"出原始密码。这是出于安全目的的设计。BCryptPasswordEncoder加密过程是不可逆的,即使......