spring框架
springspring 框架框架 Spring 框架是由于软件开发的复杂性而创建的。Spring 使用的 是基本的 JavaBean 来完成以前只可能由 EJB 完成的事情。然而, Spring 的用途不仅仅限于服务器端的开发。从简单性、可测试性和 松耦合性角度而言,绝大部分 Java 应用都可以从 Spring 中受益。 ◆目的:解决企业应用开发的复杂性 ◆功能:使用基本的 JavaBean 代替 EJB,并提供了更多的企业应 用功能 ◆范围:任何 Java 应用 Spring 是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框 架。 Spring 是一个开源框架,它由 Rod Johnson 创建。它是为了解 决企业应用开发的复杂性而创建的。Spring 使用基本的 JavaBean 来 完成以前只可能由 EJB 完成的事情。然而,Spring 的用途不仅限于 服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何 Java 应用都可以从 Spring 中受益。 Spring 是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器 框架。 轻量--从大小与开销两方面而言 Spring 都是轻量的。完整的 Spring 框架可以在一个大小只有 1MB 多的 JAR 文件里发布。并且 Spring 所需的处理开销也是微不足道的。此外,Spring 是非侵入式 的:典型地,Spring 应用中的对象不依赖于 Spring 的特定类。 控制反转--Spring通过一种称作控制反转(IoC)的技术促进了松 耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传 递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为 IoC 与 JNDI 相反--不是对象从容器中查找依赖,而是容器在对象初 始化时不等对象请求就主动将依赖传递给它。 面向切面--Spring 提供了面向切面编程的丰富支持,允许通过 分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务 (transaction)管理)进行内聚性的开发。 应用对象只实现它们应该做 的--完成业务逻辑--仅此而已。 它们并不负责(甚至是意识)其它的系 统级关注点,例如日志或事务支持。 容器--Spring 包含并管理应用对象的配置和生命周期,在这个 意义上它是一种容器,你可以配置你的每个bean 如何被创建--基于 一个可配置原型(prototype), 你的 bean 可以创建一个单独的实例或 者每次需要时都生成一个新的实例--以及它们是如何相互关联的。 然 而,Spring 不应该被混同于传统的重量级的 EJB 容器,它们经常是 庞大与笨重的,难以使用。 框架--Spring 可以将简单的组件配置、组合成为复杂的应用。 在 Spring 中,应用对象被声明式地组合,典型地是在一个XML 文件 里。 Spring也提供了很多基础功能(事务管理、 持久化框架集成等等), 将应用逻辑的开发留给了你。 所有 Spring 的这些特征使你能够编写更干净、更可管理、并且 更易于测试的代码。 它们也为 Spring 中的各种模块提供了基础支持。 Spring 框架由七个定义明确的模块组成(图 1.1)。 (Spring 框架概览图 1.1) 如果作为一个整体, 这些模块为你提供了开发企业应用所需的一 切。但你不必将应用完全基于 Spring 框架。你可以自由地挑选适合 你的应用的模块而忽略其余的模块。 就像你所看到的,所有的 Spring 模块都是在核心容器之上构建 的。容器定义了 Bean 是如何创建、配置和管理的--更多的 Spring 细 节。当你配置你的应用时, 你会潜在地使用这些类。但是作为一名开 发者,你最可能对影响容器所提供的服务的其它模块感兴趣。 这些模 块将会为你提供用于构建应用服务的框架,例如AOP 和持久性。 核心容器 这是 Spring 框架最基础的部分,它提供了依赖注入 (DependencyInjection)特征来实现容器对 Bean 的管理。 这里最基本 的概念是 BeanFactory,它是任何Spring 应用的核心。BeanFactory 是工厂模式的一个实现, 它使用 IoC 将应用配置和依赖说明从实际的 应用代码中分离出来。 应用上下文应用上下文(Context)(Context)模块模块 核心模块的 BeanFactory 使 Spring 成为一个容器,而上下文模 块使它成为一个框架。这个模块扩展了 BeanFactory 的概念,增加了 对国际化(I18N)消息、事件传播以及验证的支持。 另外,这个模块提供了许多企业服务,例如电子邮件、JNDI 访 问、EJB 集成、远程以及时序调度(scheduling)服务。也包括了对模 版框架例如 Velocity 和 FreeMarker 集成的支持。 SpringSpring 的的 AOPAOP 模块模块 Spring 在它的 AOP 模块中提供了对面向切面编程的丰富支持。 这个模块是在 Spring 应用中实现切面编程的基础。为了确保Spring 与其它 AOP 框架的互用性,Spring 的 AOP 支持基于 AOP 联盟定义的 API。AOP 联盟是一个开源项目,它的目标是通过定义一组共同的接 口和组件来促进 AOP 的使用以及不同的 AOP 实现之间的互用性。 通过 访问他们的站点,你可以找到关于 AOP 联盟的更多内容。 Spring 的 AOP 模块也将元数据编程引入了 Spring。使用Spring 的元数据支持,你可以为你的源代码增加注释,指示Spring 在何处 以及如何应用切面函数。 JDBCJDBC 抽象和抽象和 DAODAO 模块模块 使用 JDBC 经常导致大量的重复代码,取得连接、创建语句、处 理结果集,然后关闭连接。Spring 的 JDBC 和 DAO 模块抽取了这些重 复代码,因此你可以保持你的数据库访问代码干净简洁, 并且可以防 止因关闭数据库资源失败而引起的问题。 这个模块还在几种数据库服务器给出的错误消息之上建立了一 个有意义的异常层。使你不用再试图破译神秘的私有的SQL 错误消 息! 另外, 这个模块还使用了 Spring 的 AOP 模块为 Spring 应用中的 对象提供了事务管理服务。 对象对象/ /关系映射集成模块关系映射集成模块 对那些更喜欢使用对象/关系映射工具而不是直接使用 JDBC 的 人,Spring 提供了 ORM 模块。Spring 并不试图实现它自己的 ORM 解 决方案,而是为几种流行的 ORM 框架提供了集成方案,包括 Hibernate、JDO 和 iBATIS SQL 映射。Spring 的事务管理支持这些 ORM 框架中的每一个也包括 JDBC。 SpringSpring 的的 WebWeb 模块模块 Web 上下文模块建立于应用上下文模块之上,提供了一个适合于 Web 应用的上下文。另外,这个模块还提供了一些面向服务支持。例 如:实现文件上传的 multipart 请求,它也提供了Spring 和其它 Web 框架的集成,比如 Struts、WebWo