| |
|
开发:
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方法 ?重点!!!!!!!!!!!!!!!!!!!!!!!!!进入 getSpringFactoriesLoaderFactoryClass方法 看到了把 !!!! 就是我们的 EnableAutoConfiguration.class; ? ? ?看嘛,filter就是过滤我们这些类上面的@Condition条件,不可能所有的自动装配的类都加载 ?看断点: ?明白了吧,这就把我们的spring.factories里面的需要自动装配的类路径给加载过来了? 后续就不用说了吧; 给大家大概画了一下自动装配的图,希望帮助大家理解 , |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 3:08:22- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |