SpringBoot2.0源码解析一
第一章:系统总览
第一节:导学
- 根据慕课网小马哥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
spring boot starter
starter开发
最佳实践
第七节:运维管理
SpringBoot2.0源码解析一相关推荐
- solrlucene3.6.0源码解析(三)
solr索引操作(包括新增 更新 删除 提交 合并等)相关UML图如下 从上面的类图我们可以发现,其中体现了工厂方法模式及责任链模式的运用 UpdateRequestProcessor相当于责任链模式 ...
- Heritrix 3.1.0 源码解析(八)
本文接着分析存储CrawlURI curi的队列容器,最重要的是BdbWorkQueue类及BdbMultipleWorkQueues类 BdbWorkQueue类继承自抽象类WorkQueue,抽象 ...
- Heritrix 3.1.0 源码解析(六)
本文分析BdbFrontier对象的相关状态和方法 BdbFrontier类继承自WorkQueueFrontier类 WorkQueueFrontier类继承自AbstractFrontier类 ...
- Heritrix 3.1.0 源码解析(十一)
上文分析了Heritrix3.1.0系统是怎么添加CrawlURI curi对象的,那么在系统初始化的时候,是怎么载入CrawlURI curi种子的呢? 我们回顾前面的文章,在我们执行采集任务的la ...
- Heritrix 3.1.0 源码解析(三十四)
本文主要分析FetchFTP处理器,该处理器用于ftp文件的下载,该处理器的实现是通过封装commons-net-2.0.jar组件来实现ftp文件下载 在FetchFTP处理器里面定义了内部类Soc ...
- Heritrix 3.1.0 源码解析(十四)
我在分析BdbFrontier对象的void schedule(CrawlURI caURI).CrawlURI next() .void finished(CrawlURI cURI)方法是,其实还 ...
- 锚框、交并比和非极大值抑制(tf2.0源码解析)
锚框.交并比和非极大值抑制(tf2.0源码解析) 文章目录 锚框.交并比和非极大值抑制(tf2.0源码解析) 一.锚框生成 1.锚框的宽高 2.锚框的个数 3.注意点(★★★) 4.tf2.0代码 二 ...
- 基于8.0源码解析:startService 启动过程
基于8.0源码解析:startService 启动过程 首先看一张startService的图,心里有个大概的预估,跟Activity启动流程比,Service的启动稍微简单点,并且我把Service ...
- Android Glide 3.7.0 源码解析(八) , RecyclableBufferedInputStream 的 mark/reset 实现
个人博客传送门 一.mark / reset 的作用 Android Glide 3.7.0 源码解析(七) , 细说图形变换和解码有提到过RecyclableBufferedInputStream ...
最新文章
- Redis (二)_ jedis的使用
- 概率统计 —— 常犯错误
- 使用transform和transition制作CSS3动画
- UVa-12333:Revenge of Fibonacci 高精度
- python实例属性引用-python之对象(实例)
- 常用服务器安装和部署
- B - 吉哥系列故事——完美队形II HDU - 4513 (马拉车)
- 计算机毕业论文答辩评语,论文答辩评语
- 百度飞桨螺旋桨赋能生物医药,推动AI技术在药物研发领域的探索应用
- 【业务实战】批量生成二维码并打成压缩包
- 火狐可以使用广告终结者_使用Jupyter从终结者终止的地方重新启动脚本
- python 等差素数列
- 【Android -- 技术周刊】第 021 期
- optim优化器的使用
- jdk重复安装,Error:Registry key ‘Software\JavaSoft\Java Runtime Environment\CurrentVersion(已解决)
- 启动maven nexus3时遇到的诡异异常
- MATLAB 矢量场
- 修改USB默认选中MTP模式
- vue——省市区三级联动demo
- 两电平变流器matlab仿真,基于H桥级联型五电平逆变器Matlab仿真分析.doc
热门文章
- 什么是十二时辰养生法
- php采集豆瓣评分,抓取豆瓣电影TOP250的PHP代码
- requests的session方法
- vlunhub之Nagini(详细过程)
- 运算放大器的datasheet参数介绍
- 计算机的大管家教学反思,第二课 计算机的“大管家”.doc
- 易语言python模块_Python获取指定模块基址
- laravel学习途径
- R语言dplyr包的select函数和everthing函数筛选dataframe中的所有数据列(all columns of the dataframe)
- SSM框架下实现验证码图片验证功能(源码)