首页 > 其他分享 >Springboot自动装配原理

Springboot自动装配原理

时间:2023-09-27 15:24:56浏览次数:32  
标签:装配 调用 Springboot spring 注解 原理 lmport 解析 方法

BFPP: BeanFactoryPostProcessor

BPP: BeanPostProcessor

BDRPP:BeanDefinitionRegistryPostProcessor

自动装配实现的原理:

  1. 当启动springboot应用程序的时候,会先创建SpringApplication的对象,在对象的构造方法中会进行某些参数的初始化工作,最主要的是判断当前应用程序的类型以及初始化器监听器,在这个过程中会加载整个应用程序中的spring.factories文件,将文件的内容放到缓存对象中,方便后续获取。
  2. SpringApplication对象创建完成之后,开始执行run方法,来完成整个启动,启动过程中最主要的有两个方法,第一个叫做prepareContext,第二个叫做refreshContext,在这两个关键步骤中完成了自动装配的核心功能,前面的处理逻辑包含了上下文对象的创建banner的打印异常报告器的准备等各个准备工作,方便后续来进行调用。
  3. prepareContext方法中主要完成的是对上下文对象的初始化操作,包括了属性值的设置,比如环境对象,在整个过程中有一个非常重要的方法,叫做load,load主要完成一件事,将当前启动类做为一个beanDefinition注册到registry中,方便后续在进行BeanFactoryPostProcessor调用执行的时候,找到对应的主类,来完成@SpringBootApplicaiton,@EnableAutoConfiguration等注解的解析工作。
  4. refreshContext方法中会进行整个容器刷新过程,会调用中spring中的refresh方法,refresh中有13个非常关键的方法,来完成整个spring应用程序的启动,在自动装配过程中,会调用invokeBeanFactoryPostProcessor方法,在此方法中主要是对ConfigurationClassPostProcessor类的处理,是BFPP的子类也是BDRPP的子类,在调用的时候会先调用重写的BDRPP中的postProcessBeanDefinitionRegistry方法,然后调用postProcessBeanFactory方法,在执行postProcessBeanDefinitionRegistry的时候解析处理各种注解,包含@PropertySource,@ComponentScan,@ComponentScans,@Bean,@lmport等注解,最主要的是**@lmport **** **注解的解析。
  5. 在解析@lmport注解的时候,会有一个getlmports的方法,从主类开始递归解析注解,把所有包含@lmport的注解都解析到,然后在processlmport方法中对Import的类进行分类,此处主要识别的是AutoConfigurationImportSelector,其归属于ImportSelector的子类,其调用getCandidateConfigurations方法,从spring.factories文件获取需要配置的bean。在后续过程中调用deferredImportSelectorHandler中的process方法获取所有需要导入的自动配置类,来完成EnableAutoConfiguration的加载。

标签:装配,调用,Springboot,spring,注解,原理,lmport,解析,方法
From: https://www.cnblogs.com/AlwaysSui/p/17732782.html

相关文章

  • SpringBoot配置文件加载过程
    前置知识配置属性抽象和各种实现类PropertySource<T>下面是抽象类属性源和它的两个内部实现类介绍//抽象父类publicabstractclassPropertySource<T>{/**属性源名称**/protectedfinalStringname;/**属性源数据**/ protectedfinalTso......
  • 测试开发想通过python面试环节,必须懂得异常原理
    异常定义异常即是一个事件,该事件会在程序执行过程中发生,影响程序的正常执行。python处理异常的方法 我们先通过一个例子来了解代码中引入异常处理的原因。print('Start')a=10b=0print(a/b)print('End')执行结果Traceback(mostrecentcalllast): File"C:/Users/Kevin/Pycha......
  • 工作流如何实现?集成?springboot+vue+activiti技术栈
    前言activiti工作流引擎项目,企业erp、oa、hr、crm等企事业办公系统轻松落地,一套完整并且实际运用在多套项目中的案例,满足日常业务流程审批需求。一、项目形式springboot+vue+activiti集成了activiti在线编辑器,流行的前后端分离部署开发模式,快速开发平台,可插拔工作流服务。工作......
  • 7、springboot使用MessageSource国际化提示
    目录springboot使用MessageSource国际化提示1、MessageSource源码2、yml配置MessageSource3、创建MessagesUtils工具类简化使用springboot使用MessageSource国际化提示1、MessageSource源码MessageSource是spring自带的一个接口,源码如下packageorg.springframework.context;......
  • 监控汇聚平台EasyCVR中视频监控系统原理分析
    安防视频监控平台EasyCVR是一个具有强大拓展性、灵活的视频能力和轻便部署的平台。它支持多种主流标准协议,包括国标GB28181、RTSP/Onvif、RTMP等,还可以支持厂家的私有协议和SDK接入,例如海康Ehome、海大宇等设备的SDK。该平台不仅拥有传统安防视频监控的功能,还具备接入AI智能分析的......
  • SpringBoot | 拦截机制
    欢迎参观我的博客,一个Vue与SpringBoot结合的产物:https://poetize.cn博客:https://gitee.com/littledokey/poetize-vue2.git聊天室:https://gitee.com/littledokey/poetize-im-vue3.git后端:https://gitee.com/littledokey/poetize.git七牛云登录/注册地址(文件服务器,CDN):https:/......
  • SpringBoot | Bean生命周期
    欢迎参观我的博客,一个Vue与SpringBoot结合的产物:https://poetize.cn博客:https://gitee.com/littledokey/poetize-vue2.git聊天室:https://gitee.com/littledokey/poetize-im-vue3.git后端:https://gitee.com/littledokey/poetize.git七牛云登录/注册地址(文件服务器,CDN):https:/......
  • Idea+SpringBoot控制台调试打印sql语句
    在application.yml中添加:logging:level:com.xiaobai.stock.mapper:DEBUG//注意:':'后有空格,不能省略mapper:运行时控制台 ......
  • 【RocketMQ】主从同步实现原理
    RocketMQ支持集群部署来保证高可用。它基于主从模式,将节点分为Master、Slave两个角色,集群中可以有多个Master节点,一个Master节点可以有多个Slave节点。Master节点负责接收生产者发送的写入请求,将消息写入CommitLog文件,Slave节点会与Master节点建立连接,从Master节点同步消息数据。......
  • SpringBoot | 加密算法使用示例
    欢迎参观我的博客,一个Vue与SpringBoot结合的产物:https://poetize.cn博客:https://gitee.com/littledokey/poetize-vue2.git聊天室:https://gitee.com/littledokey/poetize-im-vue3.git后端:https://gitee.com/littledokey/poetize.git七牛云登录/注册地址(文件服务器,CDN):https:/......