IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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.肯定要从我们的启动类进入啦:

@SpringBootApplication
public class DemoSpringTomcatApplication{

    public static void main(String[] args) {
        SpringApplication.run(DemoSpringTomcatApplication.class, args);//启动springboot
    }

??????? 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里面的需要自动装配的类路径给加载过来了?

后续就不用说了吧;

给大家大概画了一下自动装配的图,希望帮助大家理解 ,

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-23 12:12:19  更:2021-11-23 12:12:23 
 
开发: 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-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码