《精通Spring4.x 企业应用开发实战》第1章 Spring概述

前言

汇总:《精通Spring4.x 企业应用开发实战》

一、Spring带给我们什么

  1. 方便解耦,简化开发。通过 Spring 提供的 IoC 容器,用户可以将对象之间的依赖关系交由 Spring 进行控制,避免硬编码所造成的过度程序耦合。有了 Spring, 用户不必再为单实例模式类、属性文件解析等这些底层的需求编写代码,可以更专注于上层的应用。
  2. AOP 编程的支持。通过 Spring 提供的 AOP 功能,方便进行面向切面的编程,很多不容易用传统OOP实现的功能可以通过 AOP 轻松应对。
  3. 声明式事务的支持。在 Spring 中,用户可以从单调烦闷的事务管理代码中解脱出来,通过声明的方式灵活地进行事务管理,提高开发效率和质量。
  4. 方便程序的测试。可以用非容器依赖的编程方式进行几乎所有的测试工作。在Spring 里,测试不再是昂贵的操作,而是随手可做的事情。
  5. 方便集成各种优秀框架。Spring 不排斥各种优秀的开源框架,相反,Spring 可以降低各种框架的使用难度。Spring 提供了对各种优秀框架(如 Struts、Hibernate、 Hessian、 Quartz 等)的直接支持。
  6. 降低 Java EE API 的使用难度。Spring 对很多难用的 Java EE API(如JDBC、JavaMail、远程调用等)提供了一个薄层封装,通过 Spring 的简易封装,这些Java EE API 的使用难度大大降低。
  7. Java 源码是经典的学习范例Spring 的源码设计精妙、结构清晰、匠心独运,处处体现着大师对 Java 设计模式的灵活运用及对 Java 技术的高深造诣。Spring框架源码无疑是 Java 技术的最佳实践范例。如果想在短时间内迅速提高自己的 Java 技术水平和应用开发水平,学习和研究 Spring 源码将会收到意想不到的效果

二、Spring体系结构

Spring 核心框架由 4000 多个类组成,整个框架按其所属功能可以划分为5个主要模块,如图1-1所示:
在这里插入图片描述
从整体来看,这5个主要模块几乎为企业应用提供了所需的一切,从持久层、业务层到展现层都拥有相应的支持。就像吕布的赤免马和方天画戟、秦琼的黄骠马和熟铜锏,IoC 和 AOP 是 Spring 所依赖的根本。在此基础上,Spring 整合了各种企业应用开源框架和许多优秀的第三方类库,成为 Java 企业应用 full-stack 的开发框架。

1、 loC
Spring 核心模块实现了 loC 的功能,它将类与类之间的依赖从代码中脱离出来,用配置的方式进行依赖关系描述,由 IoC 容器负责依赖类之间的创建、拼接、管理、获取等工作BeanFactory 接口是 Spring 框架的核心接口,它实现了容器许多核心的功能。

Context 模块构建于核心模块之上,扩展了 BeanFactory 的功能,添加了 il18n 国际化、Bean 生命周期控制、框架事件体系、资源加载透明化等多项功能。此外,该模块还提供了许多企业级服务的支持,如邮件服务、任务调度、JNDI 获取、EJB 集成、远程访问等。ApplicationContext 是 Context 模块的核心接口。

表达式语言模块是统一表达式语言(Unified EL) 的一个扩展,该表达式语言用于查询和管理运行期的对象,支持设置/获取对象属性,调用对象方法,操作数组、集合等。此外,该模块还提供了逻辑表达式运算、变量定义等功能,可以方便地通过表达式串和Spring IoC 容器进行交互。

2、 AOP
AOP 是继 O0P之后,对编程设计思想影响极大的技术之一。AOP 是进行横切逻辑编程的思想,它开拓了考虑问题的思路。在 AOP 模块里,Spring提供了满足 AOP Alliance规范的实现,还整合了 AspectJ 这种 AOP 语言级的框架。在 Spring 里实现 AOP 编程有众多选择。Java 5.0 引入 java.lang.instrument,允许在JVM 启动时启用一个代理类,通过该代理类在运行期修改类的字节码,改变一个类的功能,从而实现 AOP 的功能。

3、数据访问和集成
任何应用程序的核心问题是对数据的访问和操作。数据有多种表现形式,如数据表、XML、消息等,而每种数据形式又拥有不同的数据访问技术(如数据表的访问既可以直接通过 JDBC,也可以通过 Hibernate 或 MyBatis)。

首先,Spring 站在 DAO 的抽象层面,建立了一套面向 DAO层的统一的异常体系,同时将各种访问数据的检查型异常转换为非检查型异常,为整合各种持久层框架提供基础。其次,Spring 通过模板化技术对各种数据访问技术进行了薄层封裝,将模式化的代码隐藏起来,使数据访问的程序得到大幅简化。这样,Spring 就建立起了和数据形式及访问技术无关的统一的 DAO 层,借助 AOP 技术,Spring提供了声明式事务的功能。

4、 Web 及远程操作
该模块建立在 Application Context模块之上,提供了 Web 应用的各种工具类,如通过 Listener 或 Servlet 初始化 Spring 容器,将 Spring 容器注册到 Web 容器中。该模块还提供了多项面向 Web 的功能,如透明化文件上传、Velocity、FreeMarker、XSLT 的支持。此外,Spring 可以整合 Struts、 WebWork 等 MVC框架。

5、Web 及远程访问
Spring 自己提供了一个完整的类似于 Struts 的 MVC框架,称为 Spring MvC, 据说Spring 之所以也提供了一个 MVC 框架,是因为 Rod Johnson 想证明实现 MVC 其实是一项简单的工作。当然,如果你不希望使用 Spring MVC,那么 Spring 对 Struts、 Web Work等MVC 框架的整合,一定也可以给你带来方便。相对于 Servlet 的 MVC, Spring 在简化 Portlet 的开发上也做了很多工作,开发者可以从中受益。

6、WebSocket
WebSocket 提供了一个在 Web 应用中高效、双向的通信,需要考虑到客户端(浏览器)和服务器之间的高频和低时延消息交换。一般的应用场景有在线交易、游戏、协作、数据可视化等。此外,Spring 在远程访问及 Web Service 上提供了对很多著名框架的整合。由于Spring 框架的扩展性,特别是随着 Spring 框架影响性的扩大,越来越多的框架主动支持Spring 框架,使得 Spring 框架应用的涵盖面越来越宽广。

三、Spring4.0新特性

核心容器的增强

Spring 4.0 对核心容器进行了增强:

  1. 支持泛型依赖注入;
  2. 对 GgLib 类代理不再要求必须有空参构造器(这个特性带来很大便利);
  3. 在基于 Java 的配置里添加了 @Description;
  4. 提供@Conditional 注解来实现 Bean 的条件过滤;
  5. 提供@Lazy 注解解决 Bean延时依赖注入;
  6. 支持 Bean 被注入 List或者 Array 时可以通过@Order 注解或基于 Ordered 接口进行排序。
  7. 如果使用 Spring 的注解支持,则可以使用自定义注解来组合多个注解,方便对外公开特定的属性。

泛型依赖注入

Spring 4.0可以为子类的成员变量注入泛型类型:
在这里插入图片描述

Map依赖注入

在这里插入图片描述
上述写法将 BaseService 类型注入map 中。其中,k名字;value 是所有实现了 BaseService 的 Bean。

@Lazy延迟依赖注入

在这里插入图片描述

List注入

在这里插入图片描述
在这里插入图片描述

@Conditional 注解

@Conditional 类似于@Profile,一般用于在多个环境(开发环境、测试环境、正式机环境)中进行配置切换,即通过某个配置来开启某个环境。@Conditional 注解的优点是允许自己定义规则。可以指定在如@Component、@Bean、 @Configuration 等注解的类上,以决定是否创建 Bean 等

CGLIB 代理类增强

在 Spring 4.0 中,基于 CGLIB的代理类不再要求类必须有空参构造器,这是一个很好的特性。使用构造器注入有很多好处,比如,可以确保只在创建 Bean 时注入依赖,以保证 Bean 不可更改;又如,如果对UserService 类进行事务增强,此时要求 UserService 类必须有空参构造器,就会造成很多不便。

其他

Spring4.0其他特性:

  1. Spring Web MVC的增强:新增了@RestController注解;
  2. 支持了WebSocket;
  3. 全面支持Java8;

四、Spring 子项目

打开 Spring 官方网站 http://spring.io/projects,可以看到 Spring 众多的子项目,它们构建起一个丰富的企业级应用解决方案的生态系统

在这个生态系统中,除 Spring 框架本身外,还有很多值得关注的子项目。从配置到安全,从普通 Web 应用到大数据,用户在构建应用基础设施的时候,总能从 Spring 子项目中找到一个适合自己的子项目。对Spring 应用开发者来说,了解这些子项目,可以更好地使用 Spring;也可以通过阅读这些子项目的源代码,更深入地了解 Spring 的设计架构和实现原理。

下面以表格形式对Spring 的各个子项目进行简要介绍,如表1-1 所示:
在这里插入图片描述
在这里插入图片描述

总结

待补充。

猜你喜欢

转载自blog.csdn.net/qq_43783527/article/details/129140714