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 装饰 ...
随机推荐
- @atcoder - ABC133F@ Colorful Tree
目录 @description@ @solution - 1@ @accepted code - 1@ @solution - 2@ @accepted code - 2@ @details@ @de ...
- hdu 3982 Harry Potter and J.K.Rowling (半平面交 + 圆与多边形交)
Problem - 3982 题意就是给出一个圆心在原点半径为R的圆形蛋糕,上面有一个cherry,对蛋糕切若干刀,最后要求求出有cherry的那块的面积占整个蛋糕的多少. 做法显而易见,就是一个半平 ...
- 【codeforces 520B】Two Buttons
[题目链接]:http://codeforces.com/contest/520/problem/B [题意] 给你一个数n; 对它进行乘2操作,或者是-1操作; 然后问你到达m需要的步骤数; [题解 ...
- SpringBoot使用logback输出日志并打印sql信息 --经典---
最近在学习springboot以及一些springcloud插件的使用,其中发现默认的配置并不能打印一些有用的日志,所以需要自定义一些日志输出方式以便于查看日志排查问题,目前只整理了两种使用方式,如下 ...
- Python--day66--Django模板语言关于静态文件路径的灵活写法
静态文件路径的灵活写法: 正规的讲解: 静态文件相关 {% static %} {% load static %} <img src="{% static "images/h ...
- 2019-3-8-win10-uwp-渲染原理-DirectComposition-渲染
title author date CreateTime categories win10 uwp 渲染原理 DirectComposition 渲染 lindexi 2019-03-08 09:18 ...
- 一次接口压力测试qps极低原因分析及解决过程
一次接口压力测试qps极低原因分析及解决过程 9-2日在做内部的性能测试相关培训时,发现注册接口压力测试qps极低(20左右),这个性能指标远不能达到上线标准 ,经过一系列调试,最后定位 98%的时间 ...
- linux 共享队列
一个设备驱动, 在许多情况下, 不需要它自己的工作队列. 如果你只偶尔提交任务给队列, 简单地使用内核提供的共享的, 缺省的队列可能更有效. 如果你使用这个队列, 但是, 你 必须明白你将和别的在共享 ...
- Linux 内核USB 驱动
通用串行总线(USB)是一个在主机和许多外设之间的连接. 最初它被创建来替代许多慢速和不同的总线- 并口, 串口, 和键盘连接--有一个单个的所有设备都可以连接的总线类型.[45] USB 已经成长超 ...
- vue-learning:30 - component - 组件实例的引用方式
组件实例的引用方式 ref / $refs $root $parent $children 扩展查找任意组件实例的方法 在vue开发的项目中,通常会以一棵嵌套的组件树的形式来组织项目. 都存在着一个根 ...