Spring Boot
1. Spring Boot框架的优点
— 快速创建独立运行的Spring项目以及与主流框架集成
— 直接嵌入Tomcat、Jetty和Undertow服务器(无需部署WAR文件)
— 提供依赖启动器简化构建配置
— 极大程度的自动化配置Spring和第三方库,简化开发,也可修改默认值
— 提供生产就绪功能
—极少的代码生成和XML配置,开箱即用
— 准生产环境的运行时应用监控
— 与云计算的天然集成
2. Spring Boot的主要执行流程
(1)初始化SpringApplication实例
-
获取所有可用的应用初始化器类 ApplicationContextInitializer
-
this.mainApplicationClass = this.deduceMainApplicationClass()
-
查看classpath类路径webApplicationType下是否存在某个特征类
-
获取所有可用的监听器类 ApplicationListener
循环图:
判断当前项目类型—> 应用的初始化器设置—> 应用的监听设置 —>设置项目启动类 |
---|
(2) 初始化Spring Boot项目启动
-
获取监听器并运行
-
对项目环境进行预设置
-
对项目应用上下文 ApplicationContextt的预配置
-
使监听器持续运行配置好的应用上下文
-
调用项目中自定义执行器
-
运行监听器启动配置好的应用上下文
循环图:
获取并运行监听器—>准备项目运行环境—>应用上下文装配—> |
---|
持续运行上下文 <— 运行自定义执行器 <—启动上下文 |
3. Spring Boot自动配置的原理
3.1三个重要的注解
在使用main()启动SpringBoot的时候,只有一个注解@SpringBootApplication
@SpringBootApplication
public class Chapter01Application {
public static void main(String[] args) {
SpringApplication.run(Chapter01Application.class, args);
}
}
在@SpringBootApplication注解中,有三个注解是比较重要的:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters={
@Filter(type=FilterType.CUSTOM,classes=TypeExcludeFilter.class),
@Filter(type=FilterType.CUSTOM,classes=AutoConfigurationExcludeFilter.class)})
public @interface SpringBootApplication{
- @SpringBootConfiguration:底层是Configuration注解,支持JavaConfig的方式来进行配置(使用Configuration配置类等同于XML文件)。
- @EnableAutoConfiguration:开启自动配置功能
- @ComponentScan:扫描注解,默认是扫描当前类下的package。将@Controller/@Service/@Component/@Repository等注解加载到IOC容器中。
3.2EnableAutoConfiguration
可以帮助我们自动载入应用程序所需要的所有默认配置。
有两个比较重要的注解:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration{
-
@AutoConfigurationPackage:自动配置包
-
@Import:给IOC容器导入组件