SpringBoot自动装配原理

优点:

        简直不要太好用了,pom.xml里面引入相应的starter之后 , main方法里面启动,就可以直接运行一个项目,对比我们之前简直不要方便太多,以前都是要配置各种xml文件 ,里面要配置很多东西,springboot简化了很多配置;不得不佩服!!!!!

那springboot是如何进行自动装配的呢??下面我们来讲解具体流程

进入正题:

      大致流程:bean工厂的 后置处理器执行的时候会去扫描@Import类,  此时@EnableAutoConfig注解里面就有一个@Import的类,会调用该类的process()方法, 该方法会去我们的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里面的需要自动装配的类路径给加载过来了 

后续就不用说了吧;

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

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值