1. 问题描述
最近在工作中碰到安全组的同学,在编写一个用于加解密的 Filter时考虑问题不够周全导致的 bug。这个 Filter 的原意是在客户端根据一定的条件将请求的数据进行加密,同时在服务端对数据进行解密。于是,他写了一个 Filter 来过滤请求,部分代码如下所示:
1 |
|
虽日暮途远,仍梦想诗和远方
最近在工作中碰到安全组的同学,在编写一个用于加解密的 Filter时考虑问题不够周全导致的 bug。这个 Filter 的原意是在客户端根据一定的条件将请求的数据进行加密,同时在服务端对数据进行解密。于是,他写了一个 Filter 来过滤请求,部分代码如下所示:
1 | @Override |
本文主要基于SpringBoot-2.1.0.RELEASE版本分析其启动过程,以及如何完成自动配置的过程。学习理解SpringBoot是如何将我们从繁重的配置文件中解救出来的。
为了演示重点和缩短文章,文中的代码引用通常会省略掉非讲解点的代码。
另外:区分PATCH与PUT、POST方法
在HTTP原本的定义中[RFC2616],用于上传数据的方法只有POST和PUT。后来鉴于POST和PUT语义和功能上的不足,又加入了PATCH方法[RFC5789]。POST与PUT方法的差异是显而易见的,而PUT与PATCH方法就比较相似,但它们的用法却完全不同。
在Boot 你的应用一文中提到了有时候我们需要检测当前时环境是否匹配我们的运行时要求,并根据不同的环境进行个性化的适配。
Spring4已经引入了简单的扩展接口
@Conditional
和Condition
,允许大家自行去识别环境信息,但也仅此而已,并没有内置一些可以让大家在实际场景中使用的条件判定器。 真正将
@Conditional
和Condition
发扬光大的是SpringBoot,在SpringBoot是全面采用了AutoConfiguration
和@Conditional
将自动配置的强大功能展现得淋漓尽致,内置了超过10种不同类型支持超过100种不同场景的环境检测器。比如:检测当前环境中是否存在某个Class,检测当前容器中是否定义了某个SpringBean,检测当前是否有某个配置项,配置项的值是多少等等。所有的环境检测器都在org.springframework.boot.autoconfigure.condition
下面,大家可以去翻阅源码学习了解。
SpringBoot提供了非常多的非常好用的特性,比如内置容器,一键运行,注解驱动,内置监控等等。其中一个非常吸引人也非常便捷的特性就是一键启动:即将应用打包成一个可执行的JAR,并直接启动运行;
很多初学者都会比较困惑,SpringBoot是如何做到将应用代码和所有的依赖打包成一个独立的JAR并运行的,因为传统的开发方式如果要将应用打包成独立的JAR并通过java -jar命令的话,需要通过-classpath属性来指定依赖。我们今天就来分析讲解一下SpringBoot的打包、启动及运行的原理;
Spring在最初的时候,一直是采用XML作为容器配置的手段,但随着现代项目的复杂性越来越高,Spring项目大量的烂用XML反而变成一个灾难,遭受了非常严励的一个批评。由于Spring会把几乎所有的业务类都以Bean的形式配置在XML文件中,造成了大量的XML文件。使用XML来配置Bean失去了编译时的类型安全检查。大量的XML配置使得整个项目变得更加复杂。Rod Johnson也注意到了这个非常严重的问题。当随着JAVA EE 5.0的发布,其中引入了一个非常重要的特性——Annotations(注解)。注解是源代码的标签,这些标签可以在源代码层进行处理或通过编译器把它融入到class文件中。在JAVA EE 5以后的版本中,注解成为了一个主要的配置选项。
翻读唐诗,关注到两宗“悬案”。
涉及到的两首唐诗都是流传千古的名篇。
一首是《登鹳雀楼》:1
2
3白日依山尽,黄河入海流。
欲穷千里目,更上一层楼。
另一首是《清明》:1
2
3清明时节雨纷纷,路上行人欲断魂。
借问酒家何处有,牧童遥指杏花村。
我们刚开始学习 Spring Boot 的时候肯定都会看到这么一句话:
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。
这里的 Pivotal 团队肯定就是 Spring Boot 的研发团队了,那么这个 Pivotal 团队到底是个什么来头呢?和 Spring 又有那些关系?不着急且听我慢慢道来。
要说起这个 Pivotal 公司的由来,我得先从 Spring 企业的这条线来说起。