spring 为什么在不同的版本有不同的支持?
目的是寻求一个最大的公约数, 比如尽可能迎合更多的版本.
其实spring对于 java 的支持是比较靠前的. 但是对版本的要求是靠后的.
原因就是我们不太可能在升级的过程中将JDK不断地往最高版本去升级, 从稳定性或者是易用性的角度来说, 这是可取的.
Java 语法变化
2004
java 5 发布, 其实也是 spring 1 发布, 但是当时的spring 只需要 java1.3 就可以, 但是也要考虑到 java 5 的支持, 于是 spring 1.2 就开始支持 java 5 的特性了.
2006
java 6 发布, 比较有名的是 @Override 注解, 这个注解强制要求子类或子接口要覆盖父类或父接口里面的方法. 这部分特性在spring 中体现的不是非常多.
2011
Java 7 发布, diamond语法就是 new 一个泛型类的时候, 可以不指定泛型类型那种(ArrayList array = new ArrayList<>()).
多catch就是可以有多个catch语句.
Try resource, 一个专业术语叫做 ARM(Automatic Resource Management), 所谓的自动的资源的一个管理. 比如在关闭 IO 的时候, 要调用一个 close 方法, 通过 try-with-resources 语法之后, 可以不用强制去调 IO, 当然这只是一个语法层面的变化, 底层仍然会动态字节码生成一个close方法来调用.
2014
Java 8 发布, 那么这几个特性就很熟悉了, 不多说.
2017
Java 9 发布, spring 5 并没有对往后的语法或者API进行支持.
这里的考虑是在 java 9 由于模块化的实现之后, java 社区产生了一定的分裂. 可能保留在 java 8 这一版本会是一个常态, 而像 java 9 和 java 10 这种短期支持版本不太会长存, 可能会支持更长支持的版本.
Spring 对Java 语言特性运用
Java 5 语法特性
2004年spring1.0 发布, 同时2004 年Java 5 也发布了, 于是在 spring 1.2 开始支持抽象注解.
而 for-each 语法 也是 java 5 里面一个新的语法, 这个语法要求 jdk 必须是 Java 5, 所以 spring 3.0 开始, 强制要求是 Java 5.
自动装箱和泛型也是一样的道理.
Java 6 语法特性
其实 @Override 这个特性并不是很明显, 但是 spring 4 强制要求 Java 6, 因而如此分类.
Java 7 语法特性
其实spring 5 已经支持到 Java 8 了, 那么既然支持 Java 8 , 肯定也能向下支持到 Java 7.
Java 8 语法特性
同样也是 spring 5, 这里只是简单罗列了一个支持的特性.