spring envolution 2016 - hanyong/note GitHub Wiki
spring 技术发展 2016
2007 年开始接触 spring, spring mvc + jsp 一直是最喜爱的 web 开发方式。 spring 版本从 2.x 发展到今天的 4.x, 对新特性的了解和使用却非常少。 回过头来看, 几年间 spring 其实也发生了许多革命性的变化。 再看现在的 spring 官网, 已然变成一个包含众多子项目的庞大组织。
从我的角度看, 主要有以下几个方面的变革:
- 引入
@RequestMapping
注解 - 更大粒度的组件
- 自动补齐组件
- 使用 java 配置
这些变革都在大大提升 spring 的易用性和灵活性。最主要的, 还是简化配置和自动配置。
更大粒度的组件主要依靠 Configurer
完成,
由于 spring 提倡细粒度模块化, 过去要完成一件事, 我们动辄要配置十几个 bean,
现在 spring 将常用场景的典型用法抽象成一组代码框架,
我们只要引入一个 Configurer
就可以将这套框架的一堆 bean 配置起来, 而不必逐个配置, 如 WebMvcConfigurationSupport
。
自动补齐组件则是 spring boot autoconfig 提供的功能,
spring 自动检测你要做什么事, 然后缺失的 bean 自动使用典型配置给你补上。
虽然 spring 留了许多口子给用户实施自定义配置的机会, 实际上却损失了许多灵活性。
-
首先, 针对我们需要做出的修改, 要找到 spring 预留的正确的修改入口和修改方式得花费不少时间。 通常我不断阅读和琢磨代码及文档才明白怎么做, 有时比从头写传统配置还费时间。 这应该是一个技术栈的问题, 随着对新框架的了解, 应该会越来越快。
-
使用这些简易配置的用户, 常常不关心一些底层细节, 导致做自定义需求或排查问题变得困难。
-
受框架限制一些基本配置很难定义。 如 spring boot 1.3.x 不支持修改 dispatcherServlet 的 loadOnStartup 属性, 我碰到这个问题, 然后 google 到 github 上也有人提了这个 issue: https://github.com/spring-projects/spring-boot/issues/2481 。 类似问题解决办法: (1) fork 官方代码, 自己打一个版本解决此问题。麻烦且不通用。 (2) 不使用配置框架, 自己配置组建所需的 bean (传统模式)。丢失了自动配置特性, 配置比较麻烦, 而且要考虑与其他组件的整合。 (3) 像官方反馈问题, 其他官方解决此问题, 等待新版本。非通用问题官方可能不会理会。比较麻烦, 等待周期太长。