当前位置: 首页 > news >正文

springboot自动配置原理-面试题

网络上看很多文章并没什么用,重点没说到,不知道从那里入手讲,刷到的直接按照下面这个,背出来就行了


1、当启动springboot应用程序的时候,会先创建SpringApplication的对象,在对象的构造方法中会进行某些参数的初始化工作,最主要的是判断当前应用程序的类型以及初始化器和监听器,在这个过程中会加载整个应用程序中的spring.factories文件,将文件的内容放到缓存对象中,方便后续获取。
2、SpringApplication对象创建完成之后,开始执行run方法,来完成整个启动,启动过程中最主要的有两个方法,第一个叫做prepareContext,第二个叫做refreshContext,在这两个关键步骤中完整了自动装配的核心功能,前面的处理逻辑包含了上下文对象的创建,banner的打印,异常报告期的准备等各个准备工作,方便后续来进行调用。


3、在prepareContext方法中主要完成的是对上下文对象的初始化操作,包括了属性值的设置,比如环境对象,在整个过程中有一个非常重要的方法,叫做load,load主要完成一件事,将当前启动类做为一个beanDefinition注册到registny中,方便后续在进行BeanFactoryPostProcessor调用执行的时候,找到对应的主类,来完成@SpringBootApplicaiton,@EnableAutoConfiguration等注解的解析工作


4、在refreshContext方法中会进行整个容器刷新过程,会调用中spring中的refresh方法,refresh中有13个非常关键的方法,来完成整个spring应用程序的启动,在自动装配过程中,会调用invokeBeanFactoryPostProcessor方法,在此方法中主要是对ConfigurationClassPostProcessor类的处理,这次是BFPP的子类也是BDRPP的子类,在调用的时候会先调用BDRPP中的postProcessBeanDefinitionRegistry方法,然后调用postProcessBeanFactory方法,在执行postProcesseanDefinitionRegistry的时候回解析处理各种注解,包含@PropertySource,@ComponentScan,@ComponentScans,@Bean,@Import等注解,最主要的是@lmport注解的解析


5、在解析@lmport注解的时候,会有一个getlmports的方法,从主类开始递归解析注解,把所有包含@Import的注解都解析到,然后在processlmport方法中对lmport的类进行分类,此处主要识别的时候AutoConfigurationlmportSelect归属于lmportSelect的子类,在后续过程中会调用deferredlmportSelectorHandler中的process方法,来完整EnableAutoConfiguration的加载.

http://www.lryc.cn/news/428890.html

相关文章:

  • 【C++题解】1140 - 亲密数对
  • 学习大数据DAY40 基于 hive 的数据处理
  • [数据集][目标检测]手钳检测数据集VOC+YOLO格式141张1类别
  • SQL注入(head、报错、盲注)
  • 30. 包含 min 函数的栈
  • 五、OpenTK图形渲染基础
  • 桔子哥/基于云快充协议1.5版本的充电桩系统软件-充电桩系统 -新能源车充电平台源码
  • 零基础5分钟上手亚马逊云科技-高可用Web系统设计最佳实践
  • 培训学校课程管理系统-计算机毕设Java|springboot实战项目
  • 基于STM32的智能婴儿床控制系统设计(手机APP+蓝牙无线控制)(210)
  • 四、前后端分离通用权限系统(4)
  • 时序预测|基于贝叶斯BO-卷积-双向门控单元-注意力机制的单变量时间序列预测模型BO-CNN-BiGRU-Attention
  • 计算机毕业设计PySpark+Flask bilibili弹幕情感分析 B站视频数据可视化 B站爬虫 机器学习 深度学习 NLP自然语言处理 大数据毕业设计
  • 点击展开详细说明网站html引导页源码
  • Android 架构模式之 MVP
  • Ciallo~(∠・ω・ )⌒☆第二十二篇 入门request请求库使用
  • 设计模式-创建型模式-原型模式
  • 遗传算法与深度学习实战(7)——使用遗传算法解决N皇后问题
  • R语言:如何安装包“linkET”
  • JSON, YAML, XML, CSV交互可视化
  • Android UI:PopupWindow:源码分析:设置WindowManager.LayoutParams中的各种参数
  • MySQL:从入门到放弃
  • C++OpenGL三维显示镜面反射光线漫反射实例
  • 【前端面试】从npm 升级到 pnpm的总结
  • 同步外网YUM源-3
  • Linux的oracle数据库导入其他用户导出的数据库文件
  • FLUX.1 文生图模型微调指南
  • JavaWeb基础:HTTP协议与Tomcat服务器
  • python井字棋游戏设计与实现
  • 据说是可以和 Windows 一拼的 5个 Linux 发行版