SpringBoot的自我解析
1. 首先是POM文件
这里以一个集成web的Spring Boot项目为根本进行解析;
它的POM文件长这样:
父项目:
org.springframework.boot
spring-boot-starter-parent
2.5.5
Web场景启动器:
org.springframework.boot
spring-boot-starter-web
其他的都不难理解,这两个是最重要的最具有代表作用的,所以其他的就不再展示了;
首先是对于父项目坐标的理解,如果我们跟进去,点开父项目的坐标,会发现一个问题,父项目本身还具有自己的父项目,如下所示:
org.springframework.boot
spring-boot-dependencies
2.5.5
我们看到dependencies时就会很熟悉,这个明显是依赖的意思。当我们再跟进去时发现这个名为dependencies的项目的POM文件中,限制了很多很多坐标的版本。它的作用是如果我们集成了某个组件,SpringBoot项目组已经把他们可以想到的组件的版本都限定死了,这个时候我们就不用操心了。但是也存在他没有想到的情况,这个时候我们就需要自己手动进行版本限定了;
另外这个名为dependencies的项目又被称为Spring Boot的版本仲裁中心;
2. 主配置类中的注解
当我们创建一个Spring Boot项目的时候,我们肯定会写出一个带有@SpringBootApplication注解的类,这个类中一定会包含main方法,main方法里面会写SpringApplication.run();
此时这个类就是主配置类;
此处这里的核心注解就是@SpringBootApplication注解;
跟进去以后,发现主要分为:@SpringBootConfigration和@EnableAutoConfigration这两个注解;
@SpringBootConfigration:再跟进去,它里面其实就是Spring中的@Configration注解。这个注解的作用是声名这是一个配置类;
@EnableAutoConfigration:跟进去以后,它里面分为@AutoConfigrationPackage和@Import( { AutoConfigrationImportSelector.class } );
@AutoConfigration:追进去以后,它里面是一个@Import( { Registrar.class } )。这个注解的整体作用是限定我们手写的组件必须要放在主配置类所在包及其子包中;
@Import( { AutoConfigrationImportSelector.class } ):它的作用是,去扫描spring-boot-autoconfigure.jar文件中的spring.factories文件。这个文件中有很多的XXXAutoConfigration,这些都是一个一个的配置类。这个注解会把这些配置类都放到核心容器中,当我们需要使用某个组件时,它会自动运行这个组件对应的配置类然后帮助我们自动把这个组件对应的初始信息全部加载出来进而帮助我们使用这个组件;