SpringBoot自动启动原理

SpringBoot的诞生对于我们程序员来说简直是大大提高了我们的开发效率,特别是针对于之前大量的xml配置,SpringBoot已经是做到了全自动装配,那么我么就从启动类来看看SpringBoot在底层都为我们做了写什么吧。

首先请看这段代码

@SpringBootApplication
public class SpringBootDemoApplication
{
    public static void main(String[] args)
    {
        // System.setProperty("spring.devtools.restart.enabled", "false");
        SpringApplication.run(SpringBootDemoApplication.class, args);
      
    }
}

@SpringBootApplication这个注解是我们整个启动类的核心所在了,注明了这是一个SpringBoot项目的启动类。

更深入的点进去看里面有些什么!

spring boot项目自动发布重启 springboot自动启动原理_spring

这就厉害了,那么多注解在里面,看着就不想看下去的样子!没事,不必恐慌,所有复杂的东西我们一个一个看就都没那么复杂了!那么我们就先来看第一个

1.@Target :代表注解的作用目标,ElementType.TYPE

spring boot项目自动发布重启 springboot自动启动原理_源码_02

可以看到这代表可以在类、接口、枚举上面!

2.@Retention :保留政策:图中的RetentionPolicy.RUNTIME代表在运行时保留

3.@Documented 这个就不做过多解释了,生成Java文档!

4.@Inherited 表示该父类注解会被子类继承|!

5.@SpringBootConfiguration 说明这是一个SpringBoot的配置类!

6.@EnableAutoConfiguration 这是核心!自动装配配置

7.@ComponentScan 扫描组件

虽然那么多注解,但是不难看出其中核心的也就是@EnableAutoConfiguration 这个!那么接下来深入吧!

从自动装配注解深入浅出
我们点击进入@EnableAutoConfiguration注解,可以看到:

spring boot项目自动发布重启 springboot自动启动原理_spring boot项目自动发布重启_03

WTF!!!又是一堆注解!不对!上面四个貌似可以忽略,好吧,瞅一眼

@Import(AutoConfigurationImportSelector.class)

这个貌似挺重要的,好吧这个又是核心,它传入了一个自动装配打入选择器的类!

那么我们来康康里面有些啥!

哟!

spring boot项目自动发布重启 springboot自动启动原理_spring_04

方法名见名知意,获取候选配置,通过扫描META-INF/spring.factories 这个文件里的东西来完成自动配置!断言表示返回配置如果为空就说明没找到对应的配置。

来看一下这个META-INF/spring.factories 里面是啥

spring boot项目自动发布重启 springboot自动启动原理_spring boot_05

可以看到都是一些依赖!所有相关的一些jar包都在这里以读取这个配置文件实现自动装配!

所以,接下来就是总结了!

总结

SpringBoot为我们提供了之前可以用到的所有的配置,以KV的形式获取,只要通过注解就能实现装配,是不是方便了许多!