| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> Java知识库 -> SpringBoot自动装配原理 -> 正文阅读 |
|
|
[Java知识库]SpringBoot自动装配原理 |
优点:? ? ? ? 简直不要太好用了,pom.xml里面引入相应的starter之后 , main方法里面启动,就可以直接运行一个项目,对比我们之前简直不要方便太多,以前都是要配置各种xml文件 ,里面要配置很多东西,springboot简化了很多配置;不得不佩服!!!!! 那springboot是如何进行自动装配的呢??下面我们来讲解具体流程 进入正题:? ? ? ?bean工厂的 后置处理器执行的时候会去扫描@Import类,? 此时@EnableAutoConfig注解里面就有一个@Import的类,会调用该类的prosser()方法, 该方法会去我们的spring,factories文件里面找到自动装配的所有类的全路径,根据上面的条件进行注册相关对象; 1.肯定要从我们的启动类进入啦:
??????? 1. @SpringBootApplication 注解 :下面看一下关系图(我就挑重要的写了) ????????@SpringBootApplication ->? ????????????????????????????????????????????????@EnableAutoConfiguration -> ????????????????????????????????????????????????????????????????@Import({AutoConfigurationImportSelector.class}) ? ? ? ? 2.进入我们的run方法的源码啦,这个肯定是最重要的,这里开始启动 ????????SpringApplication.run(DemoSpringTomcatApplication.class, args); 注意下面我会注意说几个点,可能不会一步一步带入源码里面看,希望大家理解,不然的话太多了 进入run方法?
? ? createApplicationContext方法
?当上面创建 AnnotationConfigServletWebServerApplicationContext上下文对象的时候,会执行无参构造方法,这里主要看reader = new AnnotatedBeanDefinitionReader(this);
?上面的 AnnotatedBeanDefinitionReader(this);最终会调用到下面的方法; 往上下文对象里面注册该类的bean定义 ConfigurationClassPostProcessor
?refreshContext方法补充: AnnotationConfigServletWebServerApplicationContext? 继承 ServletWebServerApplicationContext invokeBeanFactoryPostProcessors 执行后置处理器方法
?大家应该还记得上面我们创建上下文对象的时候,无参构造方法里面注册了 bean工厂的后置处理器的,所以这里就会调用到 ConfigurationClassPostProcessor 的 postProcessBeanDefinitionRegistry方法 后置处理器的方法里面
?执行ConfigurationClassPostProcessor 的 postProcessBeanDefinitionRegistry方法
? ? ?
上面会扫描@Import注解,所以我们的@EnableAutoConfig注解里面的@Import都会被扫描到 所以自动装配的注解里面会扫描到2个@Import注解,也就是说会扫描到2个类
上面我说的process方法,大家还记得把!此时上面会进行各种扫描,扫描完成之后会进入下面这个方法
?
执行process方法
?也就是会执行到下面这个类(自动装配注解上面@Import注解上面的的类)的process方法里面
AutoConfigurationImportSelector的process方法; ? ?进入 getAutoConfigurationEntry方法
?重点!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年12日历 | -2025/12/13 9:04:49- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |