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 装饰 ...
随机推荐
- 最新版本的ADT使用问题
昨天把androidsdk和adt更新到最新版本,android sdk r22版本. 更新完后原来的项目打包后出现第三方JAR包找不到,网上搜了半天终于找到问题所在: 新版本多了一个Android ...
- oracle不明确的索引等级
当ORACLE无法判断索引的等级高低差别,优化器将只使用一个索引,它就是在WHERE子句中被列在最前面的. 举例: DEPTNO上有一个非唯一性索引,EMP_CAT也有一个非唯一性索引. SELECT ...
- 开源CMS比较
PHP-CMS的发展方向:简单,易用,美观 http://www.php-cms.cn/ 看点1,服务器一键安装,鼠标点点就搞定:输入数据库参数,在服务器上点一个按钮就完成全部的安装.简单配置一下网 ...
- php中 instanceof有什么作用
php中 instanceof有什么作用 作用:(1)判断一个对象是否是某个类的实例,(2)判断一个对象是否实现了某个接口.
- 9 个必须知道的实用 PHP 函数和功能 [转]
9 个必须知道的实用 PHP 函数和功能 [转] 即使使用 PHP 多年,也会偶然发现一些未曾了解的函数和功能.其中有些是非常有用的,但没有得到充分利用.并不是所有人都会从头到尾一页一页地阅读手册和函 ...
- Ant Design的Form组件中FormItem名称相同引起的问题
1.问题描述 在使用Antd组件Form表单的过程中,会出现FormItem同名的情况,此时要特别注意同名引起的表单行为异常问题,主要表现在以下方面: (1)同名表单项的值共享,并且其中一个的值改变, ...
- Django入门4--admin
python3选择__str__(self),python2选择__unicode__(self):
- 深度学习——GAN
整理自: https://blog.csdn.net/woaidapaopao/article/details/77806273?locationnum=9&fps=1 思想 表达式 实际计算 ...
- ajaxStart()和ajaxStop()方法
使用ajaxSetup()方法设置全局Ajax默认选项 使用ajaxSetup()方法可以设置Ajax请求的一些全局性选项值,设置完成后,后面的Ajax请求将不需要再添加这些选项值,它的调用格式为: ...
- vue-learning:17- js - methods
methods 函数是十分优雅的语言特性,它让我们可以采用可复用的方式存储一段逻辑,从而不用重复代码就可以在多处调用.函数.组件.模块等都有复用代码的考虑,函数应该是最早组织复用代码的实现. 在vue ...