SpringBoot 使用的是 2.1.3.RELEASE
第一章 SpringBoot入门
1.Spring框架的组成结构图
当使用Spring框架时,必须使用Spring Core Container(核心容器),它代表了Spring框架的核心机制,Spring Core Container 主要由 org.springframework.core、org.springframework.beans、org.springframework.context 和 org.springframework.expression 四个子包组成,主要提供Spring IoC 容器支持。
2.Spring 框架非常优秀,但是最大问题是“配置过多”。SpringBoot 的出现就是为了解决 Spring 框架存在的问题。Spring Boot的理念:约定优先于配置(COC,Convention Over Configuration)。SpringBoot 优点:编码简单:推荐使用注解;配置简单:自动配置、快速构建项目、快速集成新技术的能力;部署简单:内嵌Tomcat、Jetty等 Web 容器;监控简单:自带项目监控。
3.SpringBoot 的主要特性
1)SpringBoot 是伴随着 Spring4.0 诞生的,继承了 Spring 框架原有的优秀基因;
2)遵循“约定优先于配置”的原则,使用SpringBoot只需要很少的配置,大部分的时候,直接使用默认的配置即可;
3)对主流开发框架无配置集成,自动整合第三方框架;
4)可独立运行 Spring 项目,SpringBoot 可以以 jar 包的形式独立运行。使用 java -jar 命令或者在项目的主程序中执行 main 函数就可以成功运行项目;
5)内嵌 Servlet 容器,可以选择内嵌 Tomcat、Jetty等 Web 容器,无须以 war 包形式部署项目;
6)提供 starter 简化 Maven 配置,基本上可以做到自动化配置,高度封装,开箱即用;
7)SpringBoot 会根据项目依赖来自动配置 Spring 框架,极大减少了项目所使用的配置;
8)SpringBoot 提供了准生产环境的应用监控;
9)无代码生成和 XML 配置,纯 Java 的配置方式,很简单,很方便。
10)分布式开发,与 SpringCloud 的微服务无缝结合。
4.SpringBoot2.0 的重要改变
1)基于 Spring5 构建,Spring5 的新特性都可以在 SpringBoot2.0 中使用;
2)为各种组件的响应式编程提供了简化配置,如: Reactive Spring Data、Reactive Spring Security等;
3)要求 Java 版本必须是 Java8 或者更高版本,支持Java9;
4)要求 Gradle4或更高版本,Maven3.2 或更高版本
5)要求Tomcat8 或者更高版本, Hibernate5.2 或更高版本, Thymeleaf3 或更高版本。
5.所有的 spring-boot-starter 模块都有约定的默认配置,但是允许开发者调整这些默认的配置用以改变默认的配置行为,这就是所谓的“约定优先于配置”。SpringBoot 的配置按优先级从高到低,主要可以分为:
1)命令行参数
2)系统环境变量
3)位于文件系统中的配置文件
4)位于classpath中的配置文件
5)固化到代码中的配置
高优先级的配置项会覆盖或者优先生效。
6.常用约定
1)项目结构层面的约定
在传统的Java Web 项目中,所有的静态文件和页面都放在 WebContent 目录下,而 Spring Boot 项目的静态文件和页面文件统一放在 src/main/resources 目录对应的子目录下。 src/main/resources/static 目录用于存放各类静态资源文件,比如 css、js 和 image 等; src/main/resources/templates 目录用于存放页面模板文件,比如html和jsp等。
2)SpringMVC框架层面的约定
spring-boot-starter-web 依赖模块默认自动配置一些 SpringMVC 必要的组件。
将 ViewResolver 自动注册到 Spring 容器;将 Converter 和 Formatter 等 bean 自动注册到 Spring 容器;将对 Web 请求的支持和相应的类型转换的 HttpMessageConverter 自动注册到 Spring 容器;将 MessageCodesResolver 自动注册到 Spring 容器。
3)嵌入式 Web 容器层面的约定
spring-boot-starter-web 依赖模块默认使用嵌入式 Tomcat 作为 Web 容器对外提供服务,默认使用 8080 端口对外监听和提供服务。
7.SpringBoot的Maven项目结构
1)Source Folder 不是一个简单的 src,而是 src/main/java,因为 Maven 是一种强约束的工程类型。它对工程的文件命名和格式要求比较严格。其好处是指定了规范,方便代码的移植和理解。而 src/main/java其实是一个路径。
src/main/java:这个目录下存储主要的 Java 代码。
src/test/java:存储测试用的类,比如JUnit的测试一般就存放在这个目录下面。
2)target 文件夹是源码编译后生成的 class 文件存放的地方(如果是一个web应用,还有其他的信息也在编译打包之后放在target里面)。target文件夹下有两个目录。
classes:存放项目代码编译后生成的 class 文件;
test-classes:存放测试代码编译后生成的 class 文件
8.@RestController 注解是一个组合注解,相当于 SpringMVC 中的 @Controller + @ResponseBody 合在一起的作用。
@SpringBootApplication 注解也是一个组合注解,相当于 @Configuration + @EnableAutoConfiguration + @ComponentScan
第二章 SpringBoot 核心
1.SpringBoot 启动类与核心注解 @SpringBootApplication
SpringBoot 的项目一般都会有注解 *Application 标注的入口类,入口类中会有一个 main 方法,main 方法是一个标准的 Java 应用程序的入口方法,可以直接启动。@SpringBootApplication 注解是 SpringBoot 的核心注解,用此注解标注的入口类是应用的启动类,通常会在启动类的 main 方法中通过 SpringApplication.run(App.class,args) 来启动 SpringBoot 应用项目。
@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 { ...... }
@SpringBootApplication 注解组合了 @SpringBootConfiguration 、 @EnableAutoConfiguration 和 @ComponentScan
@SpringBootConfiguration:SpringBoot 项目的配置注解,也是一个组合注解;
@EnableAutoConfiguration:启动自配置,该注解让 SpringBoot 根据当前项目所依赖的 jar 包自动配置项目的相关配置项;
@ComponentScan:扫描配置,SpringBoot 默认会扫描 @SpringBootApplication 所在的同级包以及它的子包,所以建议将 @SpringBootApplication 修饰的入口类放置在项目包下(GroupId + ArtifactId),这样做的好处是,可以保证 SpringBoot 项目自动扫描到项目的所有包。
2.关闭某个自动配置
例如,不想自动配置 Redis,想自己手动配置,通过查看 @SpringBootApplication 的源码可以看出,关闭特定的自动配置应该使用 @SpringBootApplication 下的 exclude 参数,现以关闭 Redis 自动配置为例:
@SpringBootApplication(exclude={RedisAutoConfiguration.class})
3.应用的全局配置文件
可在SpringBoot项目的 src/main/resources 目录下或者类路径的 /config 目录下创建一个全局配置文件 application.properties 或者是后缀为 .yml 的 application.yml 文件,用于修改 SpringBoot 项目的默认配置值。通常我们习惯使用 application.properties 文件作为应用的全局配置文件,一般放到 src/main/resources 目录下。