优点:
简直不要太好用了,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方法
重点!!!!!!!!!!!!!!!!!!!!!!!!!![](https://i-blog.csdnimg.cn/blog_migrate/8380684238e071cd488a86af91c3bb5b.png)
进入 getSpringFactoriesLoaderFactoryClass方法
看到了把 !!!! 就是我们的
EnableAutoConfiguration.class;
看嘛,filter就是过滤我们这些类上面的@Condition条件,不可能所有的自动装配的类都加载
看断点:
明白了吧,这就把我们的spring.factories里面的需要自动装配的类路径给加载过来了
后续就不用说了吧;
给大家大概画了一下自动装配的图,希望帮助大家理解 ,