第一章:系统总览

第一节:导学

  • 根据慕课网小马哥springboot2.0深度实践,边学边记

学习目的

  1. SpringBoot如何基于SpringFramework 逐步走向自动装配?
  2. SpringApplication是怎么样掌控Spring应用生命周期的?
  3. SpringBoot外部化配置与Spring Environment 抽象之间是什么关系?
  4. 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源码解析一相关推荐

  1. solrlucene3.6.0源码解析(三)

    solr索引操作(包括新增 更新 删除 提交 合并等)相关UML图如下 从上面的类图我们可以发现,其中体现了工厂方法模式及责任链模式的运用 UpdateRequestProcessor相当于责任链模式 ...

  2. Heritrix 3.1.0 源码解析(八)

    本文接着分析存储CrawlURI curi的队列容器,最重要的是BdbWorkQueue类及BdbMultipleWorkQueues类 BdbWorkQueue类继承自抽象类WorkQueue,抽象 ...

  3. Heritrix 3.1.0 源码解析(六)

    本文分析BdbFrontier对象的相关状态和方法 BdbFrontier类继承自WorkQueueFrontier类   WorkQueueFrontier类继承自AbstractFrontier类 ...

  4. Heritrix 3.1.0 源码解析(十一)

    上文分析了Heritrix3.1.0系统是怎么添加CrawlURI curi对象的,那么在系统初始化的时候,是怎么载入CrawlURI curi种子的呢? 我们回顾前面的文章,在我们执行采集任务的la ...

  5. Heritrix 3.1.0 源码解析(三十四)

    本文主要分析FetchFTP处理器,该处理器用于ftp文件的下载,该处理器的实现是通过封装commons-net-2.0.jar组件来实现ftp文件下载 在FetchFTP处理器里面定义了内部类Soc ...

  6. Heritrix 3.1.0 源码解析(十四)

    我在分析BdbFrontier对象的void schedule(CrawlURI caURI).CrawlURI next() .void finished(CrawlURI cURI)方法是,其实还 ...

  7. 锚框、交并比和非极大值抑制(tf2.0源码解析)

    锚框.交并比和非极大值抑制(tf2.0源码解析) 文章目录 锚框.交并比和非极大值抑制(tf2.0源码解析) 一.锚框生成 1.锚框的宽高 2.锚框的个数 3.注意点(★★★) 4.tf2.0代码 二 ...

  8. 基于8.0源码解析:startService 启动过程

    基于8.0源码解析:startService 启动过程 首先看一张startService的图,心里有个大概的预估,跟Activity启动流程比,Service的启动稍微简单点,并且我把Service ...

  9. Android Glide 3.7.0 源码解析(八) , RecyclableBufferedInputStream 的 mark/reset 实现

    个人博客传送门 一.mark / reset 的作用 Android Glide 3.7.0 源码解析(七) , 细说图形变换和解码有提到过RecyclableBufferedInputStream ...

最新文章

  1. Redis (二)_ jedis的使用
  2. 概率统计 —— 常犯错误
  3. 使用transform和transition制作CSS3动画
  4. UVa-12333:Revenge of Fibonacci 高精度
  5. python实例属性引用-python之对象(实例)
  6. 常用服务器安装和部署
  7. B - 吉哥系列故事——完美队形II HDU - 4513 (马拉车)
  8. 计算机毕业论文答辩评语,论文答辩评语
  9. 百度飞桨螺旋桨赋能生物医药,推动AI技术在药物研发领域的探索应用
  10. 【业务实战】批量生成二维码并打成压缩包
  11. 火狐可以使用广告终结者_使用Jupyter从终结者终止的地方重新启动脚本
  12. python 等差素数列
  13. 【Android -- 技术周刊】第 021 期
  14. optim优化器的使用
  15. jdk重复安装,Error:Registry key ‘Software\JavaSoft\Java Runtime Environment\CurrentVersion(已解决)
  16. 启动maven nexus3时遇到的诡异异常
  17. MATLAB 矢量场
  18. 修改USB默认选中MTP模式
  19. vue——省市区三级联动demo
  20. 两电平变流器matlab仿真,基于H桥级联型五电平逆变器Matlab仿真分析.doc

热门文章

  1. 什么是十二时辰养生法
  2. php采集豆瓣评分,抓取豆瓣电影TOP250的PHP代码
  3. requests的session方法
  4. vlunhub之Nagini(详细过程)
  5. 运算放大器的datasheet参数介绍
  6. 计算机的大管家教学反思,第二课 计算机的“大管家”.doc
  7. 易语言python模块_Python获取指定模块基址
  8. laravel学习途径
  9. R语言dplyr包的select函数和everthing函数筛选dataframe中的所有数据列(all columns of the dataframe)
  10. SSM框架下实现验证码图片验证功能(源码)