一、Spring Boot Quickstart
  首先Spring Boot是一个框架,基于Spring框架,用来简化Spring应用的开发,其次Spring Boot的口号是是约定大于配置,这是因为使用基于Spring、Spring MVC开发 Web 项目有很多缺点,例如非常多的配置文件、繁琐的部署流程以及复杂第三方集成等。Spring Boot可以化繁为简,非常快速的创建以及部署一个产品级的应用。
Spring Boot 可以:
- 快速创建独立运行的Spring项目以及与主流框架集成
- 使用嵌入式的Servlet容器如Tomcat,引用不需要达成War包
- 有非常多的starters实现自动依赖与版本控制
- 大量的自动配置,也可以自定义配置
- 应用运行时监控
1.1 - Spring Boot 快速创建及部署应用
Spring Boot 快速创建应用
使用IDEA的Spring Initializr 可以快速创建Spring Boot工程
在quickstart包下新建controller包,增加LilithController
代码语言:javascript复制@RestController
public class LilithController {
@RequestMapping("/lilith")
public String lilith(){
return "Hello Lilith!";
}
}
运行qickstart包下的QuickstartApplication
可以看出Tomcat已经在8080端口重新启动,并且征程Application启动。在浏览器输入 localhost:8080/lilith
浏览器显示了在代码中返回的信息。
相比通过Spring、Spring MVC创建项目需要大量的Spring配置以及Spring MVC配置,Spring Boot只需要添加一个spring-boot-starter-web依赖以及一个Controller类就可以完成,无需任何配置。
Spring Boot快速部署应用
Spring Boot不仅可以快速创建应用,还可以快速部署应用
点击右侧maven侧边栏中的Lifecycle下的package命令即可对应用进行打包
在终端进行项目应用下的target目录,使用java -jar运行JAR包
代码语言:javascript复制java -jar spring-boot-quickstark-0.0.1-SNAPSHOT.jar
同样可以成功启动应用
Spring Boot工程目录介绍
使用Spring Initializr创建的项目中主要包含了
- XxxxApplication:主程序,项目启动入口
- resource:类路径下保存配置文件或者HTML资源等
- static:保存所有静态资源,如css、js、images、icon等
- template:保存html或者ftl模版页面,支持freemarker、thymeleaf等模版引擎
- application.properties:Spring Boot应用配置文件,可以修改默认配置
- XxxApplicationTests:自动生成的主程序测试类,其他测试类可以通过继承该类来使用Spring Test
二、Spring Boot 原理分析
2.1 - 版本及依赖管理
创建项目时选择了spring-boot-starter-web,该依赖并没有指定版本号,Spring Boot是如何确定依赖的版本号的?
pom.xml文件中唯一有版本号的地方是parent标签中的内容,导入了一个spring-boot-starter-parent作为父依赖,而spring-boot-starter-parent的父依赖是spring-boot-dependencies。
spring-boot-dependencies在properties标签中定义了很多依赖的版本号
再看pom.xml文件中dependency标签下的spring-boot-starter-web又依赖的哪些包?
依赖了Spring MVC、Spring Boot Tomcat Starter以及一些其他的starter,导入了web模块正常运行所需要的组件。
什么是Starters? Starters即启动器,是Spring Boot将功能场景组成的,项目中只要引入一个Starters,相关依赖都会导入进来。
查看Spring Boot官方文档中Starters
2.2 - 自动配置/主程序类
主程序类上的@SpringBootApplication注解非常重要,没有该注解程序就无法启动,该注解表名项目是一个Spring Boot项目,Spring Boot会通过运行@SpringBootApplication注解标注的类的main方法来启动应用
@SpringBootApplication
查看@SpringBootApplication注解源码
- @Target(ElementType.TYPE):表示该注解是作用在类上
- @Inherited:表示该注解是一个继承注解
- @SpringBootConfiguration:这是一个Spring Boot配置类
- @Configuration注解,既标注为配置类的意思
- @Component注解:标注为应用程序的一个组件
- @EnableAutoConfiguration: 开启自动配置功能,Spring Boot的自动配置配置需要该注解开启
- @AutoConfigurationPackage:自动配置包
- @Import(AutoConfigurationPackages.Registrar.class):@Import注解是Spring底层注解,用来导入组件,既导入AutoConfigurationPackages.Registrar.class
Deubg @Import注解导入Registrar
设置断点
选中“new PackageImports(metadata).getPackageNames()”点击鼠标右键,选择Evaluate Expression
点击Evaluate
Registrar的作用是将主程序类所在包以及所有子包下的Bean全都注册到Spring容器中
Deubg @Import注解 AutoConfigurationImportSelector
在getCandidateConfigurations方法左侧打上断点,并运行Dubg模式
会给容器中导入非常多的自动配置类,有了这些配置类就不用再手写配置了,那么这些配置是在哪里配置的呢?
重启启动Debug模式,来到AutoConfigurationImportSelector的第123行,点击Step Into;再点击Step Into选择进入loadFactoryNames方法内部;点击Step Over;到SpringFactoriesLoader类的第132行点击Step Into 进入loadSpringFactories方法内部。SpringFactoriesLoader类第136行这里首先会从缓存中获取classLoader,判断不为空之后直接返回所有配置类(去除之前的断点,将断点打在SpringFactoriesLoader类第136行,此时在进行debug,result为空),如果为空则会从配置文件中获取配置类
点击进入FACTORIES_RESOURCE_LOCATION,可以确定Spring Boot的自动配置类都存放在”META-INF/spring.factories“目录下
Spring Boot包含的自动配置类
Spring Boot在启动时从类路径下的”META-INF/spring.factories“获取EnableAutoConfiguration指定的值,将这些值代表的类导入Spring容器中,自动配置就会生效
WebMVC自动配置类配置
可以看出Spring Boot中Spring MVC的自动配置类包含了DispatchServlet等原先Spring MVC XML配置文件的内容。
以上就是Spring Boot的版本控制以及依赖管理✿✿ヽ(°▽°)ノ✿!