1. Spring Boot 简介
简化Spring应用开发的一个框架;
整个Spring技术站的大整合;
J2EE开发的一站式解决方案;
是Spring Framework的再封装,所以入门易精通难
2. 微服务
Martin Fowler 对微服务的阐述: martinfowler.com/articles/mi…
微服务:一组小型服务;可以通过HTTP的方式进行互通;每一个功能元素,最终都是一个可独立替换,可独立升级的软件单元。
单体应用(传统):All in one.
3. Spring Boot Hello World 项目
Spring Initializr 用Gradle快速创建项目:start.spring.io/
- 主程序类,用@SpringBootApplication注解来标注,说明这是一个Spring Boot应用
- Controller类
如下图所示,注解@RestController是@Controller 和@ResponseBody的组合注解。后者表示TodoItemController类中所有方法返回的数据直接写给浏览器,如果返回的是对象,则转为json格式。
- resources 文件夹结构
- static文件夹保存所有静态资源:js, css, images等;
- templates文件夹保存所有模板页面,Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面,可以使用模板引擎(freemarker, thymeleaf)
- application.properties:Spring Boot 应用的配置文件,可以修改一些默认设置,如访问端口等
4. 简化部署
用Gradle启动项目,浏览器中访问8080端口localhost://8080/greetings,即可看到api返回Hello World!字符串。
Spring Boot的Gradle插件可以自动将应用打包成一个可执行的jar包。运行gradle的build任务。打包成功后,文件默认生成路径在项目 build/libs 路径下。如:
demo-0.0.1-SNAPSHOT.jar
启动:
java -jar demo-0.0.1-SNAPSHOT.jar
Spring Boot内嵌了Tomcat,并自动完成配置,所以不需要手动做任何操作。
5. 启动器
spring-boot-starter是 Spring boot 场景启动器,是一系列依赖模块的组合。
例如Spring-boot-starter-web导入了所有web模块正常运行所依赖的组件。
Spring boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器。
6. 自动配置
@SpringBootConfiguration
Spring Boot的配置类,包含了了@Configuration 和 @Component,所以配置类也是容器中的一个组件。功能相当于之前的配置文件。
开启自动配置功能,这样自动配置的功能才能生效。
自动配置的原理是@EnableAutoConfiguration
其中包含
@AutoConfigurationPackage //自动注释包
@Import(AutoConfigurationImportSelector.class)
Spring的底层注解@Import,给容器中导入一个组件,其中AutoCofigurationImportSelector说明倒入哪些组件的选择器。这个类将所有需要导入的组件以全类名的方式返回。最终会给容器中导入非常多的自动配置类(XXX_AutoConfiguration);这些配置类是所有场景(starter)所需要的配置。
这些配置类,免去了手动编写配置类的工作。
作用是将主配置类的所在包及下面所有子包里面的所有组件扫描到Spring容器
SpringFactoriesLoader
SpringFactoriesLoader.loadFactoryNames()
Spring Boot在启动时,上述方法从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,然后,这些值将作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作。类路径包含所有引入的包,下图举个栗子🌰
以前我们需要自己配置的东西,自动配置类都帮我们完成了。所有自动配置的整合可以在org.springframework.boot.autoconfigure中看到,如下图:
参考:
视频教程:www.bilibili.com/video/BV1Et…
Gradle打包:blog.csdn.net/stupid56862…
Spring Boot Gradle插件:docs.spring.io/spring-boot…
所有spring boot场景: docs.spring.io/spring-boot…
Spring Boot官方参考文档:docs.spring.io/spring-boot…