1. 基于Spring Boot的开发流程
- 使用@SpringBootApplication注解创建服务启动类;
- 编写响应Http请求的Contorller;
- 脱离服务器独立运行服务并启动服务监控;
2. Spring Boot的新特性
- 支持快速构建项目;
- 不依赖外部容器独立运行;
- 开发部署效率高;
- 云平台的天然集成;
3. Spring Boot的优势
- 使编码更简单:只需要在Maven中添加一项依赖并实现一个方法就可以提供RESTful风格接口;
- 使配置更简单:使用.yml作为配置,语义更强大,对各种功能组件提供了默认的starter;
- 使部署更简单:可以一键启动,不需要部署应用服务器,内置Tomcat;
- 使监控更简单:基于spring-boot-actuator组件,可以通过接口获得JVM性能指标,线程工作状态等运行时的信息。
4. Spring Boot服务构建
- 使用IDEA:file->new->project-spring initializr;
4.1 Bootstrap类-启动类
- 创建项目后自动创建同名的启动类,其中最重要的是
@SpringBootApplication
注解,该注解告诉Spring容器具备该注解的类是整个Spring容器中所有JavaBean对象的入口; @SpringBootApplication
注解在指定启动类的同时马海辉自动扫描与当期那类同级及以下子包下的@Component
、@Service
、@Repository
、@Controller
、@Entity
等注解,并把这些注解对应的类转化为Bean对象全部加载到Spring容器中管理起来。- 启动类中的Main函数中执行了
SpringApplication.run()
方法,作用是启动容器并返回Spring的ApplicationContext对象
4.2 Controller类
- 最重要的是下面两个注解
@RestController
和@RequestMapping
; @RestController
是继承@Controller
的,不仅标识了当前类是一个Servlet,还告诉Spring Boot它是基于RESTful风格的HTTP端点,并且会自动使用JSON实行HTTP请求和响应的序列化/反序列化操作;@RequestMapping
与Spring MVC中是保持一直的
4.3 SpringBoot常见功能
- 集成Spring Data
支持多种SQL/NoSql 数据访问,提供了一些列默认的Repository,值得关系数据库,非关系数据库,Hadoop 大数据访问。- 集成 Spring Data JPA 支持对关系型数据库的访问;
- 集成 Spring Data Redis 支持对Redis的访问;
- 集成 Spring Data Mongodb 支持对 Mongodb 的访问;
- 集成 Spring Cloud Stream 支持消息中间件;
- 系统监控
Spring Boot 提供了Actuator组件对应用系统的运行时状态管理、配置查看以及相关功能统计;- 在 pom 文件中引入依赖:
Spring-boot-starter-actuator
以及spring-hateoas
后者是因为前者的使用要依赖于后者;在项目启动后,启动日志里会自动添加 autoconfig、dump、beans、actuator、health等多个HTTP端点,通过访问Http://localhost:8080/actuator
就可以得到响应的结果; - 监控端点可以进行扩展:实现
HealthIndicator
接口,通过health()
方法返回Health对象,再Health对象中添加新的监控配置想就可以实现扩展; - 通过实现
Endpoint
接口来自定义监控;
- 在 pom 文件中引入依赖:
5. Spring Boot 基本原理
Spring Boot 简洁性来自于 @SpringBootApplication
注解,他实际上是由三个注解组合而成的;
@Configuration
:提供JavaConfig配置类实现;@ComponentScan
:扫描@Component
等注解,把相关 Bean 定义批量加载到 IoC 容器中;@EnableAutoConfiguration
是一种选择器,负责从各种配置想中找到需要导入的具体配置类,其中最关键的组件是SpringFactoriesLoader
,它会在 META-INF/spring.factories 文件夹中查找所有的配置文件,并把 Key 为 EnableAutoConfiguration 所对应的配置通过反射实例化为配置类加载到容器中;- 当然也可以从外部配置文件加载配置信息,但是基于约定优于配置的思想,在 SpringBoot 中大量使用了默认配置。
补充- RESTful风格请求响应流程
- Http请求;
- URL地址映射;
- 请求参数构件;
- 对象序列化;
- 业务逻辑处理;
- 对象反序列化;