第一章:系统总览
第一节:导学
- 根据慕课网小马哥springboot2.0深度实践,边学边记
学习目的
- SpringBoot如何基于SpringFramework 逐步走向自动装配?
- SpringApplication是怎么样掌控Spring应用生命周期的?
- SpringBoot外部化配置与Spring Environment 抽象之间是什么关系?
- Spring Web MVC 向Spring Reactive WebFlux 过渡的真实价值和意义?
课程收获
- spring 技术和实现原理
- springboot 核心技术
- BAT大规模微服务基础设施开发与生产实施经验
技术储备
- java8 lambda
- spring framework 基础较熟练
- spirngboot基础
运行环境
- java8
- idea
- springboot版本2.0
第二节:SpringBoot易学难精
易学
- 组件自动装配:规约大于配置,专注于核心业务逻辑
- 外部化配置:一次构建、按需调配、到处运行(在jar包外配置端口等)
- 嵌入式容器:内置容器、无需部署、独立运行
- SpringBoot Starter:简化依赖、按需装配、自我包含
- Production-Ready:一站式运维、生态无缝整合
难精
- 组件自动装配:模式注解、@Enable模块、条件装配、加载机制
- 外部化配置:Environment抽象、生命周期、破坏性变更
- 嵌入式容器:Servlet Web容器、Reactive Web容器(基于Netty)
- SpringBoot Starter:依赖管理、装配条件、装配顺序
- Production-Ready:健康检查、数据指标、@Endpoint管控
第三节:SpringBoot三大核心特性
- 组件自动装配:web MVC 、web Flux 、JDBC等
- 激活:@EnableAutoConfiguration
- 配置:/META-INF/spring.factories
- 实现:XXXAutoConfiguration
- 嵌入式web容器:Tomcat、Jetty、Undertow和Netty Web Server
- 生产准备特性:指标、健康检查、外部化配置等
- 指标:/actuator/metrics
- 健康检查:/actuator/health
- 外部化配置:/actuator/configprops
第四节:web应用
传统Servlet应用
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Servlet组件
-
Servlet
-
Filter
-
Listener
Servlet注册
- Servlet注解
- Spring Bean
- RegistrationBean
异步非阻塞
- 异步Servlet
- 非阻塞Servlet
Spring Web MVC
1. Web MVC 视图
-
ViewResolver
-
View
模板引擎
- Thymeleaf
- Freemarker
- JSP
内容协商
-
(使用多个模板引擎要使用)
-
ContentNegotiationConfigurer
-
ContentNegotiationStrategy
-
ContentNegotiatingViewResolver
异常处理
@ExceptionHandler
HandlerExceptionResolver
ExceptionHandlerExceptionResolver
BasicErrorController
(Spring Boot )
2. Web MVC REST
资源服务
@RequestMapping
@GetMapping
@PostMapping
@ResponseBody
@RequestBody
资源跨域
@CrossOrigin
- 注解WebMvcConfigurer # addCorsMappings
- 接口- 传统解决方案
IFrame
jsonp
服务发现
HATEOS
Web MVC 核心
核心架构
处理流程
核心组件
DispatcherServlet
HandlerMapping
HandlerAdapter
ViewResolver
- …
Spring Web Flux
Reactor基础
Java lambda
Mono
Flux
web Flux 核心
web MVC注解兼容
@Controller
@RequestMapping
@ResponseBody
@RequestBody
- …
函数式声明
RouterFunction
异步非阻塞
- Servlet 3.1+
- Netty Reactor
使用场景
- 页面渲染
- Rest 应用
Web Server 应用
1. 切换webServer
切换其他Servlet容器
- Tomcat->Jetty
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
替换Servlet容器
- Tomcat-> WebFlux
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
2. 自定义Servlet web server
WebServerFactoryCustomizer
3. 自定义ReactIve web server
ReactiveWebServerFactoryCustomizer
第五节:数据相关
关系型数据库
JDBC
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
数据源
javax.sql.DataSource
JdbcTemplate
自动装配
DataSourceAutoConfiguration
JPA
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
实体映射关系
@javax.persistence.OneToOne
@javax.persistence.OneToMany
@javax.persistence.ManyToOne
@javax.persistence.ManyToMany
实体操作
javax.persistence.EntityManager
自动装配
HibernateJpaAutoConfiguration
事务
依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
Spring事务抽象
PlatFormTransactionManager
Jdbc事务处理
DataSourceTransactionManager
自动装配
TransactionAutoConfiguration
第六节:功能扩展
spring boot应用
SpringApplication
失败分析
FailurAnalysisReporter
应用特性
SpringApplication
事件监听等
spring boot 配置
外部化配置
ConfiguratioinProperty
@Profile
配置属性
PropertySources