spring版本和hibernate spring各个版本新特性_spring版本和hibernate

 

Spring是Rod Johnson在2004年推出的一个轻量级框架。对Java EE 系统框架臃肿、低效、脱离现实的种种现状提出了质疑,并积极寻求探索革新之道。

spring 1.x时代
在这个时代,spring的IOC容器与aop编程都是通过xml文件实现的。显然,当项目不断的扩大时,xml配置文件会越来越多,xml配置文件的管理会成为一件麻烦的工作。有的朋友就奇怪了,注解也不难啊,咋那时没有推出注解功能呢?

这就得翻翻历史看看了,2004年的时候,jdk1.5都还没推出呢,我们知道注解是jdk1.5开始支持的。也就是当时jdk都还没支持注解呢,所以那时spring不支持注解也就不奇怪了。

spring 2.xml
随着jDK1.5带来的注解支持,Spring2.x可以使用注解对Bean进行申明和注入,大大的减少了xml配置文件,同时也大大简化了项目的开发。

.Spring3.x到Spring4.x
从Spring3.x开始提供了Java配置方式,使用Java配置方式可以更好的理解你配置的Bean,现在我们就处于这个时代,并且Spring4.x和Spring boot都推荐使用Java配置的方式。

那么我们开发中,到底使用xml还是注解还是Java配置方式呢?

个人觉得:

应用的基本配置可以用xml,比如:数据源、资源文件等

业务开发使用注解:如:service的bean

Java配置方式也是不错的方式,可以替代xml做基本的配置,但应该把静态资源数据抽取到资源文件里去,避免修改配置时需要修改源码。

 

Spring各个版本新特性

Spring3.1新特性

  • 1.添加了引入环境profile功能
  • 2.添加了@enable注解,使用特定功能
  • 3.添加了对声明式缓存的支持,能够使用简单的注解声明缓存边界和规则
  • 4.添加的用于构造器注入的c命名空间,类似与Spring2的p命名空间,用于对应属性注入
  • 5.开始支持Servlet3.0,包括基于java配置中生命Servlet和Filter,不再只仅仅借助web.xml
  • 6.改善对于JPA的支持,让JPA能在Spring中完整配置JPA,不必再使用persistence.xml文件
  • 7.自动绑定路径变量到模型属性中
  • 8.提供了@RequestMappingProduces和consumes属性,用于匹配请求中的Accept和Content-Type头部信息
  • 9.提供了@RequestPart注解,用于将Multipart请求中的而某些部分绑定到处理器的方法参数中
  • 10.持Flash属性,在redirect请求后依然能够存活的属性,flash属性的RedirectAttribute类型
  • 11.为支持原生的EntityManager,Spring的JpaTemplate和JpaDaoSupport类已被废弃了来支持JPA 2.0,并在spring4中移除了

Spring3.2版本

  • 1.@Autowired.@Value和@Bean注解能够作为元注解,用于创建自定义的注入和bean声明注解
  • 2.@DateTimeFormat注解不再依赖JodaTime.如果提供了JodaTime,就会使用它,否则的话,会使用SimpleDateFormat;
  • 3.Spring的声明式缓存提供了对JCache0.5的支持
  • 4.支持定义全局的格式来解析和渲染日期和时间
  • 5.在集成测试中,能够配置和加载WebApplicationContext
  • 6.在集成测试中,能够针对request和session作用域的bean进行测试

Spring4.0版本

  • 1.Spring提供了对WebSocket编程的支持,包括支持JSR-356--Java API for WebSocket
  • 2.鉴于WebSocket仅仅提供了一种低层次的API,急需高层次的抽象,因此Spring4.0在WebSocket之上提供了一个高层次的面向消息的编程模型,
  • 该模型基于SockJS,并且包含了对STOMP协议的支持
  • 3.新的消息模块,很多的类型来源于Spring Integration项目。这个消息模块支持Spring的SockJS/STOMP功能,同时提供了基于模板的方式发布消息
  • 4.Spring是第一批支持Java8特性的Java框架,比如它所支持的lambda表达式,别的暂且不说,这首先能够让使用特定的毁掉接口更加简洁,代码更加易读
  • 5.与Java8 同时得到支持的是JSR-310--Date与Time API,在处理时间和日期时,他为开发者提供了java.util.Date或java.util.Calendar更丰富的API
  • 6.为Groovy开发的应用程序提供了更加顺畅的编程体验,尤其是支持非常便利地完全采用Groovy开发Spring应用程序。随这些一起提供的是来自于Grails
  • 的BeanBuilder,借助它能够通过Groovy配置Spring应用
  • 7.添加了条件化创建bean的功能,在这里只有开发人员定义的条件满足时,才会创建所声明的bean
  • 8.Spring4.0包含了Spring RestTemplate的一个新的异步实现,它会立即返回并且允许在操作完成后执行回调
  • 9.添加了对多项JEE规范的支持,包括JMS2.0.JTA1.2.JPA2.1和Bean Validation1.1

Spring 5.0 基于 Java 8

这么说的意思是,Spring 的源代码已经是以 Java 8 的语法来重新写过了!这可是相当大的变更,可以说是核心层面的重写。你可以在 Spring 的源码中看到很多:

这样相比 Spring 4.x 更能充分利用 Java 8 的潜力。

日志记录

Spring 5.0 使用自己的 spring-jcl模块来记录日志,这个模块会自动识别并使用现有的日志框架。

Bean 扫描

当项目非常大的时候,Spring 的扫描过程会导致很长的启动时间。在这个版本开始,你可以使用 META-INF/spring.components 文件来直接指定要注册哪些类。这种方式对于小的项目(比如说少于 200 个 bean)来说可能改善不是很明显,但对大项目来说帮助非常大。

反应式编程模型

Spring 5.0 新增了一个名为 Spring WebFlux 的反应式(Reactive)模型,与现有的 Spring MVC 并存,而它的并发承载能力可以说是高了数倍不止。注意 Spring WebFlux 和 Servlet 是不兼容的。

反应式编程模型属于比较新的东西,随着时间推移,Spring 的其他项目(如 Spring Data、Spring Security、Spring Integration 等)也会陆续加入对反应式编程模型的支持。

但是在数据库操作方面,反应式编程模型还不够成熟,因为 JDBC 规格本身仍然是阻塞式的。

单元测试

因为 JUnit 5 已经适配 Java 8,所以 Spring 5 也对 JUnit 5 做出了相应的适配,对测试进行启用和禁用更加方便,并发测试也更容易。

依赖库

Spring 5.0 的一些依赖关系也做了更新:

  • Jackson 2.6+
  • EhCache 2.10+ / 3.0 GA
  • Hibernate 5.0+
  • JDBC 4.0+
  • XmlUnit 2.x+
  • OkHttp 3.x+
  • Netty 4.1+