Spring源码系列——Spring的版本变更

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> Spring源码系列——Spring的版本变更

Spring是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架【来自百度百科】。

目前Spring已经发展到5.0.4 版本了,今天咱们就来聊一聊spring各个版本都提供了哪些新的特性。

spring 2.x

spring的2.x包括下面两个:

  • 2.0.0-2.0.8
  • 2.5.0-2.5.6 此时的spring还是很年轻的,所包含的模块也不是很多。如下图:

  • Spring源码系列:Spring的版本变更

    2.0 新特性

  • XML Schema的新XML配置语法的出现
  • 新的Bean的作用域

    以前的Spring版本对IoC容器级支持两个不同的bean作用域(singleton和prototype)。Spring 2.0在这方面进行了改进,不仅根据部署Spring的环境(例如Web环境中的请求和会话作用域Bean)提供了一些额外的作用域,还提供了“挂钩”),使Spring用户可以创建自己的范围。 应该注意的是,虽然singleton和prototype作用域bean的底层(和内部)实现已经改变,但是所述改变对于最终用户是完全透明的…不需要改变现有的配置,并且不存在现有的配置将会中断。 Spring源码系列:Spring的版本变更

  • 可扩展的XML
  • 支持@AspectJ方面
  • 更加简单XML配置(aop&事务)
  • 异步JMS
  • Spring MVC的表单标签库
  • Java 5(Tiger)支持
  • Spring 2.0现在支持用Java以外的语言编写的bean,目前支持的动态语言是JRuby,Groovy和BeanShell
  • 提供了一个关于任务调度的抽象概念
  • 引入了对各种注释的支持,用于配置目的,例如@ Transactional, @Required和@PersistenceContext / @PersistenceUnit。
  • **2.5 新特性**
  • 在Spring 2.0在整个框架中对Java 5的深入支持之后,Spring 2.5引入了对Java 6的专门支持。
  • @Autowired结合对JSR-250注释@Resource,@ PostConstruct和@PreDestroy的支持 。
  • 在类路径中自动检测组件 Spring 2.5引入了支持组件扫描:在类路径中自动检测带注释的组件。典型地,这样的组件类将与定型如进行注释@Component, @Repository,@Service, @Controller。根据应用程序的上下文配置,这些组件类将被自动检测并转换为Spring bean定义,而不需要为每个这样的bean显式配置。
  • 支持bean名称切入点元素 Spring 2.5引入了对bean(…) pointcut元素的支持,根据Spring定义的bean名称匹配特定的命名bean
  • 支持AspectJ加载时织入
  • Spring 2.5显着扩展了SimpleJdbcTemplate的功能, 并引入了 SimpleJdbcCall和SimpleJdbcInsert 操作对象。
  • 基于注释的控制器。 Spring 2.5为MVC控制器引入了一个基于注释的编程模型,使用@ RequestMapping,@ RequestParam,@ ModelAttribute等注解。这个注解支持可用于Servlet MVC和Portlet MVC。以这种风格实现的控制器不必扩展特定的基类或实现特定的接口。此外,他们通常不直接依赖于Servlet或Portlet API,尽管他们可以很容易地访问Servlet或Portlet设施。
  • 引入了Spring TestContext框架
  • 新的Bean的作用域

    可扩展的XML

    更加简单XML配置(aop&事务)

    Spring MVC的表单标签库

    Spring 2.0现在支持用Java以外的语言编写的bean,目前支持的动态语言是JRuby,Groovy和BeanShell

    引入了对各种注释的支持,用于配置目的,例如@ Transactional, @Required和@PersistenceContext / @PersistenceUnit。

    在Spring 2.0在整个框架中对Java 5的深入支持之后,Spring 2.5引入了对Java 6的专门支持。

    在类路径中自动检测组件

    支持bean名称切入点元素

    支持AspectJ加载时织入

    基于注释的控制器。

    引入了Spring TestContext框架

    Spring 3.x

    spring 3.x包括以下几个系列:

  • 3.0.0-3.0.7
  • 3.1.0-3.1.4
  • 3.2.0-3.2.18
  • 在2.x的模块上页拓展了新的模块

    Spring源码系列:Spring的版本变更

    3.0.x 新特性

  • 针对Java 5更新的核心API
  • spring 表达语言
  • 基于Java的bean元数据和在组件中定义bean元数据
  • 通用型转换系统和现场格式化系统
  • 全面的REST支持
  • 声明式模型验证
  • 早期支持Java EE 6
  • 支持嵌入式数据库
  • 3.1.x 新特性

  • 缓存抽象
  • Bean定义配置文件
  • 环境抽象
  • PropertySource抽象
  • Spring的XML名称空间的代码等价物
  • 支持Hibernate 4.x
  • TestContext框架支持@Configuration类和bean定义配置文件
  • 更简洁的构造函数注入的命名空间
  • 支持针对非标准JavaBeans设置器的注入
  • 支持Servlet 3基于代码的Servlet Container配置
  • 支持Servlet 3 MultipartResolver
  • 没有persistence.xml的JPA EntityManagerFactory引导
  • 用于注释的控制器处理的新的基于HandlerMethod的支持类
  • Flash属性和RedirectAttributes(请求重定向参数的支持)
  • "consumes" and "produces" conditions in @RequestMapping 改进了对通过'Content-Type'标题指定方法消耗的媒体类型以及通过标题指定的可生成类型的支持'Accept'
  • URI模板变量增强
  • @Valid on @RequestBody控制器方法参数
  • 控制器方法参数上的@RequestPart注释
  • UriComponentsBuilder和UriComponents
  • Bean定义配置文件

    PropertySource抽象

    支持Hibernate 4.x

    更简洁的构造函数注入的命名空间

    支持Servlet 3基于代码的Servlet Container配置

    没有persistence.xml的JPA EntityManagerFactory引导

    Flash属性和RedirectAttributes(请求重定向参数的支持)

    改进了对通过’Content-Type’标题指定方法消耗的媒体类型以及通过标题指定的可生成类型的支持’Accept’

    @Valid on @RequestBody控制器方法参数

    UriComponentsBuilder和UriComponents

    3.2.x 新特性

  • 支持基于Servlet 3的异步请求处理
  • Spring MVC测试框架
  • @ControllerAdvice注解
  • 基于代码的Servlet 3+容器初始化的抽象基类
  • ResponseEntityExceptionHandler类引入
  • 在RestTemplate和中的 @RequestBody参数支持泛型类型
  • JackJSON 2和相关的改进
  • @RequestBody改进
  • HTTP PATCH方法
  • 使用注释点和bean定义方法的元注释
  • 初步支持JCache 0.5
  • 全球日期和时间格式
  • 整个框架的并发优化
  • 新的基于Gradle的构建和移动到GitHub
  • 精炼的Java SE 7 / OpenJDK 7支持
  • Spring 4.x

    spring 4包括以下系列版本:

  • 4.0.0-4.0.9
  • 4.1.0-4.1.9
  • 4.2.0-4.2.9
  • 4.3.0-4.3.13
  • Spring源码系列:Spring的版本变更 **spring 4.0.x 新特性**
  • 删除弃用的软件包和方法 可选的第三方依赖已被提升到2010/2011最低(即Spring 4通常只支持2010年末或之后发布的版本):特别是,Hibernate 3.6+,EhCache 2.1+,Quartz 1.8+,Groovy 1.8+和Joda-Time 2.0+。作为规则的一个例外,Spring 4需要最近的Hibernate Validator 4.3+,并且对Jackson的支持已经集中在2.0+以上(当前Spring 3.2已经保留了对Jackson 1.8 / 1.9的支持;现在只是弃用了形成)。
  • Java 8(以及6和7) 可以使用Spring的回调接口使用 lambda表达式和方法引用
  • Java EE 6和7 Java EE 6或更高版本现在被认为是Spring Framework 4的基准,JPA 2.0和Servlet 3.0规范特别相关。为了与Google App Engine和较早的应用程序服务器保持兼容,可以将Spring 4应用程序部署到Servlet 2.5环境中。不过,强烈建议使用Servlet 3.0+,这是Spring开发环境中测试设置的测试和模拟包中的先决条件。
  • Groovy Bean定义DSL
  • 核心容器改进
    • Spring现在将泛型类型作为注入Beans时限定符的形式 。例如,如果您正在使用Spring Data Repository,则现在可以轻松注入一个特定的实现: @Autowired Repository customerRepository。
    • 如果您使用Spring的元注释支持,现在可以开发自定义注释来 显示源注释中的特定属性。
    • bean现在可以在自动装配到列表和数组中时进行排序。无论是标注和接口的支持。 @OrderOrdered
    • 该@Lazy注释现在可以在注入点使用,以及对@Bean 定义。
    • 该@Description批注已经推出了使用基于Java的配置开发。
    • 已经通过注释添加 了有条件地过滤bean的通用模型@Conditional。这与@Profile支持类似,但允许以编程方式开发用户定义的策略。
    • 基于CGLIB的代理类不再需要默认的构造函数。支持通过提供objenesis 其重新打包库在线,并将其作为Spring框架的一部分。有了这个策略,所有的构造函数都不再被调用代理实例。
    • 整个框架现在都有管理时区的支持,例如LocaleContext。
    • 可选的第三方依赖已被提升到2010/2011最低(即Spring 4通常只支持2010年末或之后发布的版本):特别是,Hibernate 3.6+,EhCache 2.1+,Quartz 1.8+,Groovy 1.8+和Joda-Time 2.0+。作为规则的一个例外,Spring 4需要最近的Hibernate Validator 4.3+,并且对Jackson的支持已经集中在2.0+以上(当前Spring 3.2已经保留了对Jackson 1.8 / 1.9的支持;现在只是弃用了形成)。

      可以使用Spring的回调接口使用 lambda表达式和方法引用

      Java EE 6或更高版本现在被认为是Spring Framework 4的基准,JPA 2.0和Servlet 3.0规范特别相关。为了与Google App Engine和较早的应用程序服务器保持兼容,可以将Spring 4应用程序部署到Servlet 2.5环境中。不过,强烈建议使用Servlet 3.0+,这是Spring开发环境中测试设置的测试和模拟包中的先决条件。

      核心容器改进

      web 模块支持

    • 可以在Spring MVC应用程序中使用新的@RestController注释,不需要添加@ResponseBody到每个 @RequestMapping方法中。
    • 该AsyncRestTemplate已添加,允许异步非阻塞支持开发REST客户端时。
    • 开发Spring MVC应用程序时提供了全面的时区支持。
    • 测试改进

      WebSocket,SockJS和STOMP消息传递

      spring 4.1.x 新特性

    • JMS改进
    • 缓存改进
    • 网络改进
    • WebSocket消息传递改进
    • 测试改进
    • spring 4.2.x 新特性

      Spring 4 官方文档

    • 核心容器改进
    • 数据访问改进
    • spring 4.3.x 新特性

    • 支持新的包和服务
    • 相关改进
    • 目前还没有用过spring5,总会有憧憬。当我们使用spring越来越简单时,危机也在一步步逼近;看到表象,进一步,再进一步!

      原文始发于微信公众号(glmapper工作室):

    本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

    本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

    原文链接:blog.ouyangsihai.cn >> Spring源码系列——Spring的版本变更


     上一篇
    Spring源码系列——依赖注入-引言 Spring源码系列——依赖注入-引言
    在前面文章中大概分析了一下Bean的载入,其实这个过程就是在Ioc容器中建立BeanDefinition的数据映射。但是对于Bean的实例化并未涉及,在之前的分析中也提到,bean的实例化是在依赖注入是才具体完成。 关于依赖注入关于Spri
    2021-04-05
    下一篇 
    Spring源码系列——BeanDefinition载入(中) Spring源码系列——BeanDefinition载入(中)
    Web核心-Servlet Spring源码系列:启动过程 Spring源码系列:容器刷新 Spring源码系列:BeanFactory的创建 Spring源码系列:BeanDefinition源码解析 Spring源
    2021-04-05