spring boot相对于spring来说简化了很多配置(这些配置由spring boot自动完成,而不用手动完成),本文主要讲的是有关spring boot的自动配置问题。
首先新建一个简单的spring boot项目。
(1)主程序(主入口类)
package com.example.helloworld;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HelloworldApplication {
public static void main(String[] args) {
SpringApplication.run(HelloworldApplication.class, args);
}
}
上面这个类即是我们创建的spring boot项目的启动类(自动生成)。这里面有一个注解@SpringBootApplication,该注解就是用来说明spring boot程序的启动类的,当启动spring boot项目时便会启动该启动类的主方法。这个注解还包含另外两个注解@SpringBootConfiguration和@EnableAutoConfiguration。
- @SpringBootConfiguration 标记spring boot的配置类
- @EnableAutoConfiguration 开启自动配置功能,只有该注解启用后,spring boot的自动配置功能才能实现。@EnableAutoConfiguration又包含@AutoConfigurationPackage和@Import(AutoConfigurationPackages.Registrar.class)注解
@AutoConfigurationPackage 自动配置包,通过Spring的底层注解@Import,给容器中导入一个组件AutoConfigurationPackages.Registrar.class;
将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器;
@Import(AutoConfigurationPackages.Registrar.class)给容器中导入组件(将所有需要导入的组件以全类名的方式返回)
(2)场景启动器
在pom.xml文件中引入了以下依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
spring-boot-starter,spring-boot场景启动器,帮我们导入了web模块正常运行所依赖的组件。
spring boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器。
有关具体的场景启动器可参见官方文档spring-boot-starter。
2020.03.30