初识SpringBoot

SpringBoot以约定大于配置的核心思想,默认帮我们进行了很多设置,简单来说就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了所有的框架 。

创建的包一定要在项目主程序入口的同级目录下,负责会识别不到

初识SpringBoot_第1张图片

更改启动时显示的字符拼成的字母

关于漫画的ascii艺术字,自定义Spring Boot 漫画 banner下载,各种有意思的banner、ascii图案,还有中文文字banner,作为Spring Boot和终端命令行banner会让项目更有意思。-bootschool.net

初识SpringBoot_第2张图片

原理初探:

自动装配:

pom.xml

 spring-boot-dependencies: 核心依赖在父工程中

我们在写或者引入一些SpringBoot依赖的时候,不需要指定版本,就因为有这些版本仓库

启动器:

初识SpringBoot_第3张图片

比如  spring-boot-starter-web,他就会帮我们自动导入web项目所有的依赖

springboot会将所有的功能场景都变成一个个的启动器

我们要使用什么功能,就只需要找到对应的启动器就可以了,也就是一个个的starter

这个链接就是关于springboot的所有启动器

Developing with Spring Boot

初识SpringBoot_第4张图片

主程序

//标注这个类是一个springboot的应用
@SpringBootApplication
public class BootApplication {

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

}

注解:

@SpringBootConfiguration     springboot的配置   启动类下的所有资源被导入
       @Configuration        spring配置类
             @Component      说明这也是一个spring的组件
  
@EnableAutoConfiguration       自动配置
       @AutoConfigurationPackage   自动配置包
           @Import({AutoConfigurationPackages.Registrar.class})  自动配置包"扫描包"       
       @Import({AutoConfigurationImportSelector.class})   自动配置导入选择
//获取所有的配置
List configurations = this.getCandidateConfigurations(annotationMetadata, attributes);  

获取候选的配置

    protected List getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
        List configurations = ImportCandidates.load(AutoConfiguration.class, this.getBeanClassLoader()).getCandidates();
        Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. If you are using a custom packaging, make sure that file is correct.");
        return configurations;
    }

AutoConfigurationImportSelector

初识SpringBoot_第5张图片

初识SpringBoot_第6张图片

自动配置的核心配置文件

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. 

初识SpringBoot_第7张图片

初识SpringBoot_第8张图片

初识SpringBoot_第9张图片

核心注解  :@ConditionalOnxxxxxx

如果条件都满足则生效

例如mvc,  我们导入了webmvc的包则全部满足,就会生效

初识SpringBoot_第10张图片

总结: SpringBoot所有自动配置都是在启动的时候扫描并加载

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. 

所有的自动配置类都在这里面,,但是不一定都生效,要判断条件是否成立,只要导入了对应的start,就有对应的启动器了,有个启动器,我们的自动装配就会生效,然后就配置成功了

SpringBoot加载流程记忆版

  • 程序main方法执行开始加载@SpringBootApplication注解

  • 程序加载找到@EnableAutoConfiguration注解

    • 自动开启包扫描@AutoConfigurationPackage(加载自己的配置项)

      • AutoConfigurationPackages.Registrar.class 读取主启动类所在的包路径,则包扫描开始.创建/读取/主启动类的子孙包中的信息.

    • 自动导入其他组件

      • AutoConfigurationImportSelector.class在 springboot-autoConfigure中读取自动配置项 142项. 根据用户自己依赖的jar包文件 开始加载组件.

      • 如果加载组件的过程中 发现配置文件与需要的名称一致,则动态为配置项的配置文件的属性赋值 实现参数的动态修改.

  • 如果程序运行没有错 则SpringBoot程序启动成功.

你可能感兴趣的:(spring,boot,java,spring)