了解pom.xml配置文件中的自动装配其他依赖
一、了解SpringBoot的核心依赖都在他的父工程中
<!-- 我们创建一个SpringBoot项目时,都会存在一个远端的父项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
我们导入各种依赖的时候,不需要写版本,是因为在父项目中有一个巨大的仓库,直接调用即可
二、启动器
<!--启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
pom.xml配置文件中的dependencies中都是配置的各种启动器
1、启动器:即SpringBoot的启动场景,比如配置spring-boot-starter-web,他就会帮我们自动导入web环境所有的依赖
2、重点:SpringBoot会将所有的功能场景,都变成一个个的启动器!!!
去哪能找到这些启动器呢?
(1)在官网上进入SpringBoot,选择learn找打对应的版本,点击reference doc
(2)选择useing Spring Boot
(3)进去之后选择start,内含全部的启动器
三、打包插件
<build>
<plugins>
<!-- SpringBoot打包插件,负责将项目打包成jar包,对应Maven侧边栏package功能-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.5</version>
</plugin>
</plugins>
</build>
主启动程序剖析注解@SpringBootApplication与application.yaml配置文件关系
一、代码
@SpringBootApplication//@SpringBootApplication注解标注这个类是SpringBoot的一个应用
public class Springboot01HelloworldApplication {
public static void main(String[] args) {
//将SpringBoot应用启动
SpringApplication.run(Springboot01HelloworldApplication.class, args);
}
}
二、剖析@SpringBootApplication
1、点进去这个注解里面有两个注解需要研究
2、对@SpringBootConfiguration理解
是SpringBoot的配置注解
点进@Configuration,发现,他还是一个spring的组件
三、对@EnableAutoConfiguration理解
1、是自动导入配置的注解
2、点进去:
四、了解自动配置的核心文件spring.factories
五、阶段总结
SpringBoot所有的自动配置,都是在启动的时候扫描并加载,所有的自动配置类都在spring.factories类中,但是不一定会生效,要通过注解@ConditionalOnXXX判断条件是否成立,只要导入了对应的starter启动器,自动装配就会生效,即配置成功。详细注解剖析@SpringBootApplication,见附件原理图
六、对spring.factories文件中的自动配置类的理解,厘清自动装配的属性和application.yaml配置文件的关系
1、以HttpEncodingAutoConfiguration自动配置类为例,所有的自动配置类都是一个被@Configuration注解标记的配置类(结合Spring中的:“使用Config类配置”理解),从spring.factories中进入这个类中,分析他的注解
2、点进这个HttpProperties类,这个类配置的所有属性,就是对应我们在application.yaml配置文件中spring.http带出来的配置
3、@ConditionalOn...判断条件注解扩展
4、总结(厘清自动装配的属性和application.yaml配置文件的关系)
在spring.factories这个文件中存在大量的XXXAutoConfiguration自动装配的类,每一个这样的XXXAutoConfiguration类都是容器中的一个组件,最后都加入到容器中,用他们来做自动配置。这个类中所有的属性是由XXXProperties配置类来负责,而这个XXXProperties配置类总会通过@ConfigurationProperties注解和一个配置文件进行绑定,来设置某些属性的默认值,我们恰恰可以找到XXXProperties配置类和绑定的配置文件的对应关系,来自定义属性或者配置!
5、拓展:通过配置查看自动配置类是否有效(我们首先得明确,只有我们导入了对应的依赖启动器(jar包),自动配置类才会生效!)
(1)在application.yaml配置文件中配置如下代码
debug: true
(2)启动主程序服务,查看控制台打印结果
①有效状态的自动配置类
②无效状态的自动配置类
主启动类如何运行?
主启动类中的run方法,源码研究不值当,直接研究它的功能:
1、推断当前的应用类型是普通的项目还是Web项目(因为如果是Web项目,服务器可以一直启动)
2、查找并加载所有可用初始化器,设置到initializers属性中
3、找出所有的应用程序监听器,设置到listeners属性中
4、推断并设置main方法的定义类,找到运行的主类
SpringBoot的核心自动装配原理,值得你花很长的时间去研究,设计相当巧妙!弄清自动装配的原理,那么你就对SpringBoot已经掌握了很大的一部分了,真心希望各位能够好好去研究下,绝对受益很大,祝各位早日成为全栈工程师!