首页 > 编程语言 >spring程序员前置知识-ApplicationContext执行过程分析-其一

spring程序员前置知识-ApplicationContext执行过程分析-其一

时间:2024-09-26 20:52:00浏览次数:9  
标签:ApplicationContext 加入 spring BeanFactoryPostProcessor beanDefinitionMap 程序员 bean

1.前置知识

一个bean在加入spring容器之前,首先要读取class文件生成BeanDefinition,然后通过BeanDefinition实例化bean,BeanDefinition就是一个用来描述bean如何被创建出来的对象,最后执行bean的初始化。

在spring中有两种Processor,一种是BeanFactoryPostProcessor,另一种是BeanPostProcessor。

BeanFactoryPostProcessor:主要是给BeanFactoryPost注册BeanDefinition,存入beanDefinitionMap,也只有加入到beanDefinitionMap以后,才会执行spring后期的bean生命周期。

BeanPostProcessor:主要是在bean依赖注入完成以后,在bean初始化过程中会对每一个bean都回调里面的实现的两个方法。

2.整体流程

以下下是基于springboot2.x进行分析。
在这里插入图片描述

主要包括以下核心步骤:

2.1

调用createApplicationContext();加入几个核心的Processor的BeanDefinition,有BeanFactoryPostProcessor和BeanPostProcessor。
在这里插入图片描述
在这里插入图片描述

2.2

调用invokeBeanFactoryPostProcessors(beanFactory);这方法首先会把org.springframework.context.annotation.ConfigurationClassPostProcessor
这个BeanFactoryPostProcessor的对象创建好,放入到单例池中,另外还会创建几个spring容器内部的bean也加入到单例池中。这个过程执行结束以后,所有需要加入的spring容器的bean相对应的BeanDefinition都已经加入到beanDefinitionMap中了。
在这里插入图片描述

调用postProcessBeanDefinitionRegistry(registry);这个方法首先要获取一个包路径,默认就是启动类所在的包(如果加了@ComponentScan,则使用配置的basePackages做为包路径)。然后开始扫描这个包以及子包中包含@Component注解的类(包括@Componet@Service@Configuration…),然后把这些类封装成BeanDefinition放入beanDefinitionMap中。
其中@Configuration这个注解处理的时候,会把里面的通过@Bean标注的方法对应的bean也会扫描并加入到beanDefinitionMap。
其中@Import这个注解导入其他配置类的时候,也会把里面的通过@Bean标注的方法对应的bean也会扫描并加入到beanDefinitionMap。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3

执行registerBeanPostProcessors(beanFactory);这个方法首先创建好BeanpostProcessor的对象,放入单例池中,同时也会在加入到Beanfactory中的beanPostProcessors这个list列表中,初始化过程中回调BeanpostProcessor方法的时候,就是遍历这个list中的每一个BeanpostProcessor然后调用里面的方法。有些内置的BeanpostProcessor是在之前就加入了,但是执行依赖注入的BeanPostProcessor就是在这个阶段创建好对象,并且加入到beanPostProcessors的list列表中。

3.总结

大概分析了前面几个过程,梳理一下这几个过程大概就是:

》》》》》
加入spring内部BeanFactoryPostProcessor和BeanPostProcessor对应的BeanDefinition到beanDefinitionMap中
》》》》》
创建ConfigurationClassPostProcessor这个BeanFactoryPostProcessor的对象,用来扫面项目中需要加入spring容器的bean,扫描是把类的信息封装成BeanDefinition存入到beanDefinitionMap。
》》》》》
创建BeanPostProcessor对象并且存入到spring容器中,后续在bean初始化阶段会进行回调使用。

路漫漫其修远兮,吾将上下而求索。

标签:ApplicationContext,加入,spring,BeanFactoryPostProcessor,beanDefinitionMap,程序员,bean
From: https://blog.csdn.net/a273967581/article/details/142568792

相关文章

  • Spring ioc&DI
    (一)认识 IOC和DI1.IOC  认识IOC之前我们先来说一下spring是什么,我们说spring就是一个框架,可以让我们开发更加简单,他内部有很多集成好的一些类,所以我们用一句更简单的话来概括spring:Spring就是一个包含了众多工具方法的IOC容器  那什么是IOC呢?简单来说他的核心就是......
  • 如何打造Java SpringBoot民宿山庄农家乐系统?2025最新毕业设计攻略
    ✍✍计算机毕业编程指导师**⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java、Python、小程序、大数据实战项目集⚡⚡文末获取......
  • 如何打造流浪天使乐园管理系统?Java SpringBoot+Vue技术解析
    ✍✍计算机毕业编程指导师**⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java、Python、小程序、大数据实战项目集⚡⚡文末获取......
  • 基于springboot的点餐系统的设计与实现(附源码、lw、ppt)
    博主介绍:✌十余年IT大项目实战经验、在某机构培训学员上千名、专注于本行业领域✌技术范围:Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫+大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战项目。主要内容:系统功能设计、开题报告......
  • Spring
     1.简介spring是一种用于简化复杂的企业开发的轻量级框架(从目的来说),是一种轻量级IOC(控制反转)和AOP(面向切面)的容器框架spring官网Spring|Homespring官方中文文档官网https://www.docs4dev.com/docs/zh/spring-framework/软件开发原则ocp开闭原则  在软件开发过......
  • 程序员狂喜,用上就能放心摸鱼了!
    大家好,我是CUGGZ。近两年,人工智能领域迎来了革命性的爆发,涌现出众多优秀的AI产品,它们正悄然改变着我的工作与生活。在日常的开发工作中,AI工具已成为不可或缺的助手,极大地提升了工作效率。最近,我一直在用一个与众不同的AI工具——秘塔AI搜索,区别于传统的问答式AI,秘塔AI......
  • 基于SpringBoot的在线考试系统设计与实现
    1.1 研究背景21世纪,我国早在上世纪就已普及互联网信息,互联网对人们生活中带来了无限的便利。像大部分的企事业单位都有自己的系统,由从今传统的管理模式向互联网发展,如今开发自己的系统是理所当然的。那么开发在线考试系统意义和用处有哪些呢?1.首先提升形象:这是每个企事业单......
  • 基于Spring Boot的高校失物招领平台
    目录前言 一、技术栈二、系统功能介绍三、核心代码1、登录模块 2、文件上传模块3、代码封装前言时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,高校失物招领平台当然不能排除在外。高校失物招领平台是在实际应用和软......
  • 基于Spring Boot的高校师资管理系统
    目录前言 一、技术栈二、系统功能介绍三、核心代码1、登录模块 2、文件上传模块3、代码封装前言快速发展的社会中,人们的生活水平都在提高,生活节奏也在逐渐加快。为了节省时间和提高工作效率,越来越多的人选择利用互联网进行线上打理各种事务,然后线上管理系统也就......
  • 基于Spring Boot的高校门诊管理系统
    目录前言 一、技术栈二、系统功能介绍三、核心代码1、登录模块 2、文件上传模块3、代码封装前言相比于以前的传统手工管理方式,智能化的管理方式可以大幅降低高校门诊的运营人员成本,实现了高校门诊管理的标准化、制度化、程序化的管理,有效地防止了高校门诊管理的......