7.1 Spring简介和Spring5.0的变化
7.1 Spring简介和Spring5.0的变化
Spring
框架由Rod Johnson
开发,2004
年发布了Spring
框架的第一个版本。经过十多年的发展,Spring
已经发展成Java EE
开发中最重要的框架之一。对于一个Java
开发者来说, Spring
已经成为必须掌握的技能。
不仅如此,围绕Spring
,以Spring
为核心还衍生出了一系列框架,如Spring Web Flow
、 Spring Security
,Spring Data
、 Spring boot
、 Spring Cloud
等,具体请登录Spring官方网站, Spring
越来越强大,带给开发者越来越多的便捷。本书所介绍的是Spring
框架本身.
7.1.1 Spring简介
Spring
是一个从实际开发中抽取出来的框架,因此它完成了大量开发中的通用步骤,留给开发者的仅仅是与特定应用相关的部分,从而大大提高了企业应用的开发效率。Spring
为企业应用的开发提供了一个轻量级的解决方案。该解决方案包括:
- 基于依赖注入的核心机制、
- 基于
AOP
的声明式事务管理、 - 与多种持久层技术的整合,
- 以及优秀的
Web MVC
框架等。
Spring
致力于Java EE
应用各层的解决方案,而不是仅仅专注于某一层的方案。可以说: Spring
是企业应用开发的”一站式”选择, Spring
贯穿表现层
、业务层
、持久层
。然而, Spring
并不想取代那些已有的框架而是以高度的开放性与它们无缝整合。
总结起来, Spring
具有如下优点
- 低侵入式设计,代码的污染极低。
- 独立于各种应用服务器,基于
Spring
框架的应用,可以真正实现Write once, Run Anywhere
的承诺。 Spring
的IoC
容器降低了业务对象替换的复杂性,提高了组件之间的解耦。Spring
的AOP
支持允许将一些通用任务如安全、事务、日志等进行集中式处理,从而提供了更好的复用。Spring
的ORM
和DAO
提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问。Spring
的高度开放性,并不强制应用完全依赖于Spring
,开发者可自由选用Spring
框架的部分或全部。
图7.1显示了Spring
框架的组成结构图。正如从图7.1所见到的,当使用Spring
框架时,必须使用Spring Core Container
(即Spring
容器),它代表了Spring
框架的核心机制, Spring Core Container
主要由:
org.springframework.core
、org.springframework.beans
、org.springframework.context
org.springframework.expression
、
四个包及其子包组成,主要提供Spring loc
容器支持。其中org.springframework.expression
及其子包是Spring3.0
新增的,它提供了Spring Expression Language
支持。
7.1.2 Spring5.0的变化
与之前的Spring
版本相比, Spring5.0
发生了一些变化,这些变化包括:
Spring5.0
整个框架已经全面基于Java8
,因此**Spring5.0
对JDK
的最低要求就是Java8
**,Spring5.0
可以在运行时支持Java9
。- 因为
Java8
的反射增强,因此Spring5.0
框架可以对方法的参数进行更高效的访问。 Spring5.0
核心接口已加入了Java8
接口支持的默认方法Spring5.0
框架已经自带了通用的日志封装,因此不再需要额外的common-logging
日志包。当然,新版的日志封装也会对Log4j 2.x
、SLF4J
、JUL( java util.logging)
进行自动检测。- 引入
@Nullable
和@notNull
注解来修饰可空的参数以及返回值,避免运行时导致NPE
异常。 Spring5.0
框架支持使用组件索引来扫描目标组件,使用组件索引扫描比使用类路径扫描更髙效。Spring5.0
框架支持JetBrains Kotlin
语言。Spring5.0
的Web
支持已经升级为支持Servlet3.1
以及更高版本的规范。
从上面介绍可以看出, Spring5.0
的升级主要就是全面基于Java8
,并在运行时支持Java9
和Servlet3.1
规范,也为核心IoC
容器增强了一些注解,并通过组件索引扫描来提升运行效率。本书所介绍的是Spring
的最新发布版:Spring5.0.2
,后面会介绍Spring5.0
为核心IoC
容器引入的注解.