SpringBoot 总结篇
时至今日,SpringBoot 系列文章也算是告一段落,回想起当初立flag的情景,仿佛还历历在目。用一个月时间学完 SpringBoot 并整理成文章?又定一些异想天开计划,当时这样想着。不过,虽然过程比较艰辛,但结局也还算完美,在最后一篇文章完成那一刻,心情却很平静,我想,大概是习以为常了吧。
在系列结尾,再对 SpringBoot 做一个总结,也算是尘埃落定了。
正文
SpringBoot 最显著的功能就是快速启动一个 Spring 应用,为 Spring 所有特性提供了更广泛的支持;提供一系列大型项目通用的非功能性功能(例如嵌入式服务器,安全性,指标,运行状况检查和外部化配置);完全没有代码生成,也不需要XML配置也是一大亮点。
该系列文章虽然以讨论 SpringBoot 为中心,但也涉及到了 Spring 技术栈,因为 SpringBoot 底层核心是就是 Spring ,如果对 Spring 了如指掌,那学习 SpringBoot 就轻而易举了。
1、自动装配基础
SpringBoot 中运用了大量的 Spring
注解,其注解大致分为这几类:
- 配置注解:
@Configuration
、@ComponentScan
、@Import
、@Conditional
、Bean
- 模式注解:
@Componnt
、@Repository
、@Service
、@Controller
- @Enable 模块注解:
@EnableWebMvc
、@EnableTransactionManagement
、@EnableWebFlux
配置注解都在 Spring
的 ConfigurationClassParser#doProcessConfigurationClass
方法中进行处理,后续会在 Spring
系列文章中详细介绍;模式注解都标注了 @Component
注解,属于 @Component
的派生注解,@ComponentScan
会扫描标注 @Component
及其派生注解的类,并将这些类加入到 Spring 容器中;@Enable
模块注解中通过 @Import
导入配置类,在这些配置类中加载 @Enable
模块需要的组件。
2、自动装配正文
在 SpringBoot
时代,通过一个main方法就可以启动一个应用,其底层依赖的就是 Spring
几个注解。从 @SpringBootApplication
注解中的 @EnableAutoConfiguration
注解开始,@EnableAutoConfiguration
属于 Spring
的 @Enable
模块注解,在该注解中通过 @Import
导入 AutoConfigurationImportSelector
类,在该类中加载所有以 AutoConfiguration
为后缀且标注 @Configuration
注解的自动配置类,每个自动配置类可以装配一个外部模块,如 Web MVC 模块对应的配置类是 WebMvcAutoConfiguration
。在自动配置类中又有众多 @Conditional
条件注解,可达到灵活装配的目的。
3、SpringApplication启动类准备阶段
详见《SpringBoot(三)SpringApplication启动类准备阶段》
在构造 SpringApplication
启动类时,初始化了几个重要的类,如 WebApplicationType
、ApplicationContextInitializer
、ApplicationListener
。其中 WebApplicationType
存储的是当前应用类型,如 Servlet Web 、Reactive Web; ApplicationContextInitializer
和 ApplicationListener
则是 SpringBoot
通过扩展 Spring 特性创建的初始化器及监听器。
4、SpringApplication启动类运行阶段
详见《SpringBoot(四)SpringApplication启动类运行阶段》
在 SpringApplication
运行阶段中,先是通过扩展 Spring
监听机制,在 SpringBoot
各个阶段发布不同事件,执行多个事件监听器;然后创建 Environment
类,这是外部化配置的核心类;最后启动 Spring
容器,通过 WebApplicationType
判定当前应用类型,创建应用对应 ApplicationContext
应用上下文,再调用 ApplicationContext#refresh
方法启动容器。
5、外部化配置之Environment
详见《SpringBoot(五)外部化配置之Environment》
这篇文章介绍了外部化配置的几种资源类型,如 properties、YAML、环境变量、系统属性、启动参数等。还详细介绍了 Environment
类,该类是外部化配置核心类,所有外部化配置数据,都保存在该类中,并和大家讨论了整个存储流程。
6、外部化配置之@ConfigurationProperties
详见《SpringBoot(六)外部化配置之@ConfigurationProperties》
@ConfigurationProperties
是 SpringBoot
实现外部化配置的重要注解,配合 SprinBoot
自动装配特性来达到快速开发的目的。主要将 properties 配置文件和 Properties 配置类中的属性进行映射,同样也和大家讨论了整个映射流程。
7、嵌入式Web容器
这篇文章详细讨论了容器的创建及启动。传统 Spring
应用需手动创建和启动 Web 容器,在 SpringBoot
中,则是嵌入式的方式自动创建和启动。SpringBoot
支持的 Web 容器类型有 Servlet Web 容器和 Reactive Web 容器,它们都有具体容器实现,Sevlet Web 对应的是 Tomcat
、Jetty
、Undertow
,默认实现是 Tomcat
;Reactive Web 对应的是 Netty
。
8、Starter机制之自定义Starter
详见《SpringBoot(八)Starter机制之自定义Starter》
这篇文章详细介绍了 SpringBoot
的 Starter
机制,并通过自定义 Starter
来深入理解整个运行机制。Starter
也是 SpringBoot
重要特性,通过集成 Starter
依赖,来简化项目搭建以及开发过程。
结语
总结篇就到这里结束,最后,江湖路远,我们,下个系列见。
SpringBoot 总结篇的更多相关文章
- (二)SpringBoot基础篇- 静态资源的访问及Thymeleaf模板引擎的使用
一.描述 在应用系统开发的过程中,不可避免的需要使用静态资源(浏览器看的懂,他可以有变量,例:HTML页面,css样式文件,文本,属性文件,图片等): 并且SpringBoot内置了Thymeleaf ...
- 视频作品《springboot基础篇》上线了
1.场景描述 第一个视频作品出炉了,<springboot基础篇>上线了,有需要的朋友可以直接点击链接观看.(如需购买,请通过本文链接购买) 2. 课程内容 课程地址:https://ed ...
- SpringBoot Web篇(二)
摘要 继上一篇 SpringBoot Web篇(一) 文件上传 当我们服务器需要接收用户上传的文件时,就需要使用MultipartFile作为参数接收文件.如下: @PostMapping(" ...
- (一)SpringBoot基础篇- 介绍及HelloWorld初体验
1.SpringBoot介绍: 根据官方SpringBoot文档描述,BUILD ANYTHING WITH SPRING BOOT (用SPRING BOOT构建任何东西,很牛X呀!),下面是官方文 ...
- SpringBoot基础篇AOP之基本使用姿势小结
一般来讲,谈到Spring的特性,绕不过去的就是DI(依赖注入)和AOP(切面),在将bean的系列中,说了DI的多种使用姿势:接下来看一下AOP的玩法 <!-- more --> I. ...
- JAVAEE——SpringBoot日志篇:日志框架SLF4j、日志配置、日志使用、切换日志框架
Spring Boot 日志篇 1.日志框架(故事引入) 小张:开发一个大型系统: 1.System.out.println(""):将关键数据打印在控制台:去掉?写在一个文件 ...
- SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件
原文链接 我们这一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件.然后再使用阿里巴巴提供的开源连接池druid,这个连接池 ...
- SpringBoot入门篇--对于JSON数据的返回以及处理二
我们在进行开发的过程的难免会进行对象的返回,比如一个用户对象User,以及一个集合list,Map等等.在这篇博客中我们就是需要学习一下怎么对一个对象中某些属性的处理.需要补充的一点就是SpringB ...
- SpringBoot 第一篇:入门篇
作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10819728.html 版权声明:本文为博主原创文章,转载请附上博文链接! 前言 博主从去年 ...
- SpringBoot 应用篇之从 0 到 1 实现一个自定义 Bean 注册器
191213-SpringBoot 应用篇之从 0 到 1 实现一个自定义 Bean 注册器 我们知道在 spring 中可以通过@Component,@Service, @Repository 装饰 ...
随机推荐
- H3C 命令行编辑功能
- Python--day19--collections模块
常用模块一的各个模块解释: 文件名不要起跟模块名一样:(模块本身就是一个py文件) collection模块: namedtuple方法: 例1: 例2: dequeue方法:双端队列 有序字典Ord ...
- H3C MP-Group方式配置PPP MP
- Python--day47--mysql慢日志记录
- Python--day24--复习
- 安装 NodeJ Koa2、3 + 独立插件 cli脚手架 npm cnpm Vue
安装 NodeJ npm cnpm Koa2.3 + 独立插件 cli脚手架 Vue 安装 在 这里写过了 这两个分开了写 Nodej:下载 node.js 安装 10.0版 ...
- CSS 个性化滚动条样式
页面中有许多内容过多时,为了不影响整体布局,总会有滚动效果代替.but,许多情况浏览器自带的滚动条样式与整体UI 界面不搭啊,怎么办,当然作为界面的化妆师CSS就出手啦~ 滚动条样式由多个伪类组成 下 ...
- Python--day37--多进程中的方法join()
1,多进程中的方法join()的作用: 感知一个子进程的结束,将异步的程序改为同步 #join() import time from multiprocessing import Process de ...
- springboot2.x整合JPA
项目结构 pom <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www. ...
- linux ioctl 接口
大部分驱动需要 -- 除了读写设备的能力 -- 通过设备驱动进行各种硬件控制的能力. 大 部分设备可进行超出简单的数据传输之外的操作; 用户空间必须常常能够请求, 例如, 设 备锁上它的门, 弹出它的 ...