英语原文共 7 页,剩余内容已隐藏,支付完成后下载完整资料
Spring 框架:一个开源Java开发健壮的 Java 应用程序的平台
Dashrath Mane、Ketaki Chitnis、Namrata Ojha
摘要: 本文介绍了 Spring 框架的基本概念。Spring 框架是一个开源 Java 平台,它为轻松快速地开发 Java 应用程序提供全面的基础架构支持。Spring 框架是一个轻量级的解决方案,也是构建企业级应用程序的潜在一站式商店。
关键词:面向切面的编程、依赖注入、IoC 容器、ORM
一、引言
Spring 是最流行的企业 Java 应用程序开发框架。全球数百万开发人员使用 Spring Framework 来创建高性能、易于测试、可重用的代码。Spring 框架是一个开源 Java 平台,最初由 Rod Johnson 编写,并于 2003 年 6 月在 Apache 2.0 许可下首次发布。
在大小和移植性方面,spring是轻量级的。Spring 框架的基本版本约为 2MB。Spring 框架的核心功能可用于开发任何 Java 应用程序,但也有用于在 Java EE 平台之上构建 Web 应用程序的扩展。Spring 框架旨在通过启用基于 POJO 的编程模型使 J2EE 更易于使用并促进良好的编程实践。Spring 框架为基于Java企业应用提供了一个全面的编程和配置模型 - 在任何类型的部署平台上。Spring 的一个关键元素是应用程序级别的基础设施支持:Spring 专注于企业应用程序的“管道”,因此团队可以专注于应用程序级别的业务逻辑,而无需与特定部署环境建立不必要的联系。Spring包括:
bull; 灵活的依赖注入,带有基于 XML 注释的配置样式
bull; 高级支持使用基于代理和基于AspectJ 的变体进行面向切面的编程。
bull; 对常见开源框架(如 Hibernate 和 Quartz)的一流支持
bull; 用于构建 RESTful MVC 应用程序和服务端点的灵活 Web 框架
Spring 在设计上是模块化的,允许增量采用单个部分,例如核心容器或 JDBC 支持。虽然所有 Spring 服务都非常适合 Spring 核心容器,但许多服务也可以在容器之外以编程方式使用。
支持的部署平台范围从独立应用程序到 Tomcat 和 Java EE 服务器,例如 WebSphere。Spring 在支持 Java 的主要云平台上也是非常好的,例如 Heroku、Google App Engine、Amazon Elastic Beanstalk 和 VMware 的 Cloud Foundry。[1]
二、弹簧框架架构
Spring 可能成为所有企业应用程序的一站式商店;但是,Spring 是模块化的,允许您选择适用于您的模块,而无需引入其余模块。
Spring Framework 提供了大约 20 个模块,可以根据应用程序需求使用它们。
图 1. Spring 框架架构
A. 核心容器
核心容器 由 Core、Beans、Context 和 Expression Language 模块组成,详细信息如下:
bull; 核心模块提供框架的基本部分,包括 IoC 和依赖
注入功能。
bull; Bean 模块提供了 BeanFactory,它是工厂模式的复杂实现。
bull; Context 模块建立在Core 和Beans 模块提供的坚实基础之上,它是访问定义和配置的任何对象的媒介。ApplicationContext 接口是 Context 模块的焦点。
bull; 表达式语言模块提供了一种强大的表达式语言,用于在运行时查询和操作对象图。
B. 数据访问/集成
数据访问/集成层由 JDBC、ORM、OXM、JMS 和 Transaction 模块组成,详细信息如下:
bull; JDBC 模块提供了一个 JDBC 抽象层,无需进行繁琐的 JDBC 相关编码。
bull; ORM 模块为流行的对象关系映射 API 提供集成层,包括 JPA、JDO、Hibernate 和 iBatis。
bull; OXM 模块提供了一个抽象层,支持 JAXB、Castor、XMLBeans、JiBX 和 XStream 的对象/XML 映射实现。
bull; Java 消息传递服务 JMS 模块包含用于生成和使用消息的功能。
bull; Transaction 模块支持对实现特殊接口的类和所有 POJO 的程序化和声明式事务管理。
C. 网络
Web 层由 Web、Web-Servlet、WebStruts 和 Web-Portlet 模块组成,详细信息如下:
bull; Web 模块提供基本的面向 Web 的集成功能,例如多部分文件上传功能和使用 servlet 侦听器和面向 Web 的应用程序上下文初始化 IoC 容器。
bull; Web-Servlet 模块包含 Spring 的用于 Web 应用程序的模型视图控制器 (MVC) 实现。
bull; Web-Struts 模块包含用于在 Spring 应用程序中集成经典 Struts Web 层的支持类。
D. 杂项:
bull; AOP 模块提供面向方面的编程实现,允许您定义方法拦截器和切入点,以清晰地解耦实现应该分离的功能的代码。
bull; Aspects 模块提供与AspectJ 的集成,AspectJ 又是一个强大且成熟的面向方面编程(AOP) 框架。
bull; Instrumentation 模块提供类检测支持和类加载器实现以在某些应用程序服务器中使用。
bull; 测试模块支持使用 JUnit 或 TestNG 框架测试 Spring 组件。
三、spring IOC容器
Spring 容器是 Spring Framework 的核心。容器将创建对象,将它们连接在一起,配置它们,并管理它们从创建到销毁的完整生命周期。Spring 容器使用依赖注入 (DI) 来管理组成应用程序的组件。这些对象称为 Spring Bean,我们将在下一章讨论。
容器通过读取提供的配置元数据来获取关于要实例化、配置和组装哪些对象的指令。配置元数据可以由 XML、Java 注释或 Java 代码表示。下图是 Spring 如何工作的高级视图。Spring IoC 容器利用 Java POJO 类和配置元数据来生成完全配置和可执行的系统或应用程序。
图 2. Spring IoC 容器
Spring 提供了以下两种不同类型的容器。
A. Spring BeanFactory 容器
这是为 DI 提供基本支持的最简单的容器。BeanFactory 及相关接口,如 BeanFactoryAware、InitializingBean、DisposableBean,在 Spring 中仍然存在,目的是为了向后兼容与 Spring 集成的大量第三方框架。
B. Spring ApplicationContext 容器 这个容器增加了更多的企业特定功能,例如从属性文件解析文本消息的能力以及将应用程序事件发布到感兴趣的事件侦听器的能力。
ApplicationContext 容器包含了 BeanFactory 容器的所有功能,因此一般推荐使用它而不是 BeanFactory。BeanFactory 仍可用于轻量级应用程序,如移动设备或基于小程序的应用程序,其中数据量和速度非常重要。
C. Beans
构成应用程序主干并由 Spring IoC 容器管理的对象称为 bean。bean 是由 Spring IoC 容器实例化、组装和管理的对象。这些 bean 是使用您提供给容器的配置元数据创建的,例如,以 XML lt;bean/gt; 定义的形式。
D.Spring 配置元数据
Spring IoC 容器与实际编写此配置元数据的格式完全解耦。有以下三种重要的方法可以向 Spring 容器提供配置元数据:bull;基于 XML 的配置文件。
bull; 基于注释的配置
bull; 基于 Java 的配置
四。依赖注入 (DI)
Spring 最受认同的技术是控制反转的依赖注入 (DI) 风格。控制反转(IoC)是一个通用概念,它可以用多种不同的方式表达,依赖注入只是控制反转的一个具体例子。
在编写复杂的 Java 应用程序时,应用程序类应尽可能独立于其他 Java 类,以增加重用这些类的可能性,并在进行单元测试时独立于其他类对其进行测试。依赖注入有助于将这些类粘合在一起,同时保持它们独立。究竟什么是依赖注入?我们分别来看这两个词。这里依赖部分转化为两个类之间的关联。例如,A 类依赖于 B 类。现在,我们来看第二部分,注入。这意味着 B 类将被 IoC 注入到 A 类中。
依赖注入可以通过将参数传递给构造函数的方式发生,也可以通过使用 setter 方法在构造后发生。假设您有一个具有文本编辑器组件的应用程序,并且您想要提供拼写检查。您的标准代码如下所示:
public class TextEditor {
privateSpellCheckerspellChecker;
publicTextEditor() {
spellChecker = new SpellChecker();
}
}
我们在这里所做的是在 TextEditor 和 SpellChecker 之间创建依赖关系。在控制反转的情况下,我们将改为执行以下操作:
public class TextEditor {
privateSpellCheckerspellChecker;
publicTextEditor(SpellCheckerspellChecker) {
this.spellChecker = spellChecker;
}
}
这里 TextEditor 不应该担心 SpellChecker 的实现。SpellChecker 将独立实现,并在 TextEditor 实例化时提供给 TextEditor,整个过程由 Spring Framework 控制。我们已经从 TextEditor 中删除了全部控制权并将其保存在其他地方(即 XML 配置文件),并且依赖项(即 SpellChecker 类)正在通过类构造函数注入到类 TextEditor 中。因此,依赖注入 (DI) 已经“反转”了控制流,因为您已经有效地将依赖委托给了某个外部系统。
注入依赖的第二种方法是通过Setter
我们将创建 SpellChecker 实例的 TextEditor 类的方法,该实例将用于调用 setter 方法来初始化 TextEditor 的属性。依赖注入有几个重要的好处。例如:
bull; 因为组件不需要在运行时查找协作者,所以它们的编写和维护要简单得多。在 Spring 的 IoC 版本中,组件通过公开 JavaBean setter 方法或通过构造函数参数来表达它们对其他组件的依赖。EJB 等价物是 JNDI 查找,它要求开发人员编写代码来做出环境假设。
bull; 出于同样的原因,应用程序代码更容易测试。例如,JavaBean 属性简单、核心 Java 且易于测试:只需编写一个自包含的 JUnit 测试方法,即可创建对象并设置相关属性。
bull; 一个好的 IoC 实现会保留强类型。如果您需要使用通用工厂来查找协作者,则必须将结果转换为所需的类型。这不是一个大问题,但它是不优雅的。使用 IoC,您可以在代码中表达强类型依赖,而框架负责类型转换。这意味着当框架配置应用程序时,类型不匹配将作为错误引发;您不必担心代码中的类转换异常。
bull; 依赖关系是明确的。例如,如果应用程序类在实例化时尝试加载属性文件或连接到数据库,那么如果不阅读代码,环境假设可能并不明显(使测试复杂化并降低部署灵活性)。使用依赖注入方法,依赖是显式的,并且在构造函数或 JavaBean 属性中很明显。
bull; 大多数业务对象不依赖于 IoC 容器 API。这使得使用遗留代码变得容易,并且在 IoC 容器内部或外部都易于使用对象。例如,Spring 用户经常将 Jakarta Commons DBCP DataSource 配置为 Spring bean:无需编写任何自定义代码来执行此操作。我们说 IoC 容器不是侵入性的:使用它不会侵入依赖于其 API 的代码。几乎任何 POJO 都可以成为 Spring bean 工厂中的组件。具有多参数构造函数的现有 JavaBean 或对象工作得特别好,但 Spring 还为从静态工厂方法或什至由 IoC 容器管理的其他对象上的方法实例化对象提供了独特的支持。依赖注入不同于传统的容器架构,例如 EJB,在这种最小化应用程序代码对容器的依赖性的过程中。这意味着您的业务对象可能会在不同的依赖注入框架中运行 - 或在任何框架之外运行而无需更改代码。
依赖注入并不是一个新概念,尽管它最近才在 J2EE
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[589796],资料为PDF文档或Word文档,PDF文档可免费转换为Word
课题毕业论文、文献综述、任务书、外文翻译、程序设计、图纸设计等资料可联系客服协助查找。