附录A 译文
Spring 框架
摘要
本文介绍了一个流行的开源应用框架:Spring框架。本文分析了Hibernate和Struts的机制,提出了一种基于Hibernate和Struts的J2EE应用开发策略。文章还介绍了Spring的基本概念,并详细介绍其中以“bean工厂”为核心的轻量级控制反转(IOC)容器。这篇文章将告诉你Spring并不是一个特别的web框架,而是一个拥有专用网络的支持的通用的轻量级应用程序框架。
关键词:J2EE, Spring, the MVC, EJB, IOC
1.一种基于Hibernate和Struts的J2EE应用开发策略
随着Java技术的逐渐成熟与完善,作为建立企业级应用的标准平台,J2EE平台得到了长足的发展。借助于J2EE规范中包含的多项技术:Enterprise JavaBean(EJB)、Java Servlets(Servlet)、Java Server Pages(JSP)、Java Message Service(JMS)等,开发出了许多应用系统。但是,在传统J2EE应用的开发过程中也出现了一些问题:
第一个是问题数据模型和逻辑模型之间的矛盾。目前使用的数据库基本上都是关系型数据库,而Java本质上是一种面向对象的语言,对象在存储和读取时使用SQL和JDBC进行数据库操作,降低了编程的效率以及系统的可维护性;
第二个是传统的J2EE应用多采用基于EJB的重量级框架,这种框架适合于开发大型企业应用,但是使用EJB容器进行开发和调试需要耗费大量时间。为了降低代码的耦合性,提高系统的开发效率,本文提出了一种基于Struts框架和Hibernate框架的J2EE应用开发策略。
数据持久层及Hibernate Hibernate是一个数据持久层框架,是一种实现对象和关系之间映射(O/R Mapping)的工具,它对JDBC进行了轻量级的对象封装,使程序员可以使用对象编程思想来操作数据库。它不仅提供了从Java类到数据表的映射,也提供了数据查询和恢复机制。相对于使用JDBC和SQL来操作数据库,使用Hibernate能大大的提高实现的效率。Hibernate框架用配置文件的形式来定义Java对象和数据表之间的映射关系,同时在更深的层面将数据表之间的关系解释为Java对象之间的继承及包含等关系。通过使用HQL语句将复杂的关系算法用对象的方式描述,在很大程度上简化了对数据的查询,加快了开发的效率。在Hibernate中有一个简单而直观的API,用于对数据库所表示的对象执行查询。要创建或修改这些对象,只需在程序中与它们进行交互,然后告诉Hibernate保存即可。这样,大量封装持久化操作的业务逻辑不再需要编写烦琐的JDBC语句,从而使数据持久层得到了极大的简化。
用Struts实现MVC架构 MVC(Model-View-Controller)由Trygve Reenskaug提出,首先被应用在SmallTalk-80环境中,是许多交互和界面系统的构成基础。根据界面设计可变性的需求,MVC把交互系统的组成分解成模型、视图、控制器三部分。 模型(Model)是软件所处理问题逻辑在独立于外在显示内容和形式情况下的内在抽象,封装了问题的核心数据、逻辑和功能的计算关系,独立于具体的界面表达和I/O操作。视图(View)把表示模型数据及逻辑关系和状态的信息及特定形式展示给用户。它从模型获得显示信息,对于相同的信息可以有多个不同的显示形式或视图。控制器(Controller)是处理用户与软件的交互操作的,其职责是控制提供模型中任何变化的传播,确保用户界面于模型间的对应联系;它接受用户的输入,将输入反馈给模型,进而实现对模型的计算控制,是使模型和视图协调工作的部件。通常一个视图对应一个控制器。模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图都应反映到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上是一种模型的变化-传播机制。
Struts框架最早是作为Apache Jakarta项目的组成部分问世运做,它继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。Struts框架很好的结合了Jsp,Java Servlet,Java Bean,Taglib等技术。在Struts中,承担MVC中控制器角色的是ActionServlet。ActionServlet是一个通用的控制组件。这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。它截取和 分发这些请求到相应的动作类(这些动作类都是Action类的子类)。另外控制组件也负责用相应的请求参数填充Action Form(FromBean),并传给动作类(ActionBean)。动作类访问核心商业逻辑,即访问Java Bean或调用EJB。最后动作类把控制权传给后续的JSP文件,由JSP文件生成视图。所有这些控制逻辑利用Struts-config.xml文件来配置。在Struts框架中,视图主要由JSP生成页面完成,Struts提供丰富的JSP标签库,这有利于分开表现逻辑和程序逻辑。模型以一个或多个Java Bean的形式存在。在Struts中,主要存在三种Bean,分别是:Action,ActionForm,EJB或者Java Bean。 Struts框架没有具体定义模型层的实现,在实际开发中,模型层通常是和业务逻辑紧密相连的,并且要对底层数据进行操作。下面介绍一种开发策略,将Hibernate引入到Struts框架的模型层中,使用它来进行数据封装和映射,提供持久化的支持。
以在J2EE应用中非常普遍的用户登录过程为例,来说明上述体系结构是如何具体运用的。登录的流程非常清晰:用户从登录页面login.jsp输入登录信息,系统对登录信息进行验证,如果正确则成功登录,否则提示相应错误信息。 在开发过程中,使用Eclipse作为开发环境,同时加载了对Struts及Hibernate提供更好的控制和支持的第三方插件MyEclipse,Web服务器使用Tomcat,数据库选用了Mysql。 首先对Hibernate进行配置,只需要对系统自动生成的hibernate.cfg.xml进行修改,配置好数据库连接的各种参数以及定义数据映射文件。由于Hibernate所带的连接池主要用于测试,性能不是很好,可以通过JNDI将其修改为使用Tomcat的连接池。
2. Spring 框架简介
Spring让开发者更轻松的实现轻量级、可扩展的J2EE架构。对于我们推荐的架构模块,让Spring提供了即时可用的实现。此外,Spring还提供了同意的应用架构方式,以及大量的中间层功能模块,能大大简化了J2EE的开发,并且比传统的开发方式更加灵活。
2.1 Spring项目的出发点
2.1.1 解决被其它框架忽略的部分
在J2EE的各个具体领域都有很多出色的解决方案----web框架、持久化方案、远程调用工具,凡此种种。然而,将这些工具整合成一个全面的架构却困难重重,甚至成为一种负担。Spring的目标就是提供一种贯穿始终的解决方案,将各种专用框架整合成一个连贯的整体架构。Spring还涉及到其它框架没有触及到的地方。例如,很少有框架提供普遍适用的事务管理或是数据库存储对象实现;即便各个领域都有很好的选择,也没有一个框架能够帮忙把所有这些东西整合到一个应用中去。因此,我们说Spring是一个应用框架,而不是web框架、IOC框架、AOP框架或者中间层框架什么的。
2.1.2 易于选择
一个框架应该有清楚的层次划分,允许用户使用其中的单项功能,而不是把自己的整个世界观强加给用户。Spring中的许多特性---例如JDBC抽象层或者Hibernation集成----都可以作为一个库单独使用,当然也可以作为Spring整体方案的一个部分。
2.1.3 易于使用
正如前面说过的,仅仅J2EE本身并不易用---很多常见的问题光靠J2EE都很难解决。一个好的基础框架首先应该让容易的任务容易完成,而不需要让应用开发人员现在就为将来的复杂需求(例如分布式事务)买单。框架应该帮助开发
人员合理使用J2EE的服务(例如JTA),同时又避免造成对服务的依赖,从而减少不必要的复杂性。
2.1.4 鼓励最佳实现
Spring力求把遵循最佳实践--例如“针对接口编程”--的成本降低到最小。另一方面,Spring又力求不强加任何架构风格,而是把选择的权利留给开发者。
2.1.5 非入侵性
一个好的基础设施框架应保持应用组态灵活和一致,避免自定义单身和工厂的需要。一个单一的风格应该是适用于所有配置的需要,从中间层的网络控制器。
2.1.6 统一配置
测试整个应用程序或单个应用程序类的单元测试应该尽可能的容易。模仿对象替换资源或应用程序的对象应该是简单的。
2.1.7 可扩展
由于Spring本身是基于接口的,而不是类,它是很容易扩展或定制。许多Spring组件使某种形式的Strategy模式,因此可以方便定制。
2.2 一个分层的应用框架
前面我们从轻量级容器(lightwight container)的角度介绍了Spring框架,并将其与别的IOC容器(例如PicoContainer) 作了比较。虽然为JavaBean设计的轻量级容器是Spring的核心概念,但这也只是所有中间层解决方案的基础而已。
2.2.1 基础构建模块
Spring是一个完整的应用框架,它可以在很懂应用层发挥作用。Spring由多个子框架组成,而且这些框架都是相对独立的。不过,只要你愿意,你就可以将它们无缝集成起来,成为一个全面的应用框架,下面讲解Spring框架的关键概念。
2.2.1.1 bean工厂
Spring轻量级IOC容器能够配置、装备JavaBean和大多数Java对象,使得开发者不必定制Singleton和自己的配置机制。Spring提供了多个“即拿即用”的bean工厂实现。其中包括一个基于XML的bean工厂。轻量级IOC容器和依赖注入(Dependency Injcction)将是本章节关注的内容。
2.2.1.2 应用上下文
Spring应用程序上下文添加消息来源和资源加载支持扩展bean工厂的概念,并提供钩到现有的环境中。不同的盒子的实现包括独立的应用程序上下文和基于Web的应用程序上下文的XML。
2.2.1.3 AOP框架
Spring的AOP框架提供的任何类的Spring轻量级容器管理方法拦截AOP支持。可以对轻量级容器管理的任何对象进行方法拦截。在bean工厂中,可以轻松的为JavaBean提供代理,从而在运行天衣无缝地将拦截器和其他的adcice整合进来。我们将在后面详细讨论Spring的AOP框架。Spring AOP的主要用途就是为了POJO提供声明性的企业级服务。
2.2.1.4 自动代理
Spring提供了一个更高的抽象层次的AOP框架和低水平的服务,同时也提供了很多基础性的服务,从而在J2EE环境中提供了类似于.NET的易用性--特别是,声明的企业提供的服务可以通过源代码级的元数据驱动的。
2.2.1.5 事务管理
Spring提供了一个通用的交易管理基础设施,可插拔的交易策略(例如JTA和JDBC)和不同的事务划分方式。后面会详细介绍Spring事务管理的基本原理,及其强大的威力和灵活性。
2.2.1.6 DAO的抽象
Spring定义一组通用的数据访问异常,在创建通用的DAO接口时可以用这些异常类型抛出有意义的异常信息,,独立于底层的存储机制。后面阐述了更多的细节讨论Spring对DAO的支持,以及针对JDBC JDO,Hibernate的不同实施策略。
2.2.1.7 JDBC的支持
Spring提供了两个层次的抽象,使得编写基于JDBC的DAO特别简单:org.springframework.jdbc.core包提供了基于模板、回调的JDBC用法,org.springframework.jdbc.object包则把关系数据库操作建模为可服用对象。比起直接使用JDBC,用Spring 的JDBC包可以提供更大的生产力和消除常见的错误,如泄漏等。Spring JDBC抽象层集成了事务抽象和DAO的抽象。
2.2.1.8 集成O/R映工具
Spring提供了多种O/R映射工具的支持,如Hibernate,JDO和ibatis数据库简化资源设置,采集,和释放,并且将O/R映射与整个事务和DAO抽象集成起来。这些集成软件包允许应用程序分配自定义ThreadLocal会话和本地事务进行处理,不必考虑底层究竟采用哪种O
剩余内容已隐藏,支付完成后下载完整资料
附录A 译文
Spring 框架
摘要
本文介绍了一个流行的开源应用框架:Spring框架。本文分析了Hibernate和Struts的机制,提出了一种基于Hibernate和Struts的J2EE应用开发策略。文章还介绍了Spring的基本概念,并详细介绍其中以“bean工厂”为核心的轻量级控制反转(IOC)容器。这篇文章将告诉你Spring并不是一个特别的web框架,而是一个拥有专用网络的支持的通用的轻量级应用程序框架。
关键词:J2EE, Spring, the MVC, EJB, IOC
1.一种基于Hibernate和Struts的J2EE应用开发策略
随着Java技术的逐渐成熟与完善,作为建立企业级应用的标准平台,J2EE平台得到了长足的发展。借助于J2EE规范中包含的多项技术:Enterprise JavaBean(EJB)、Java Servlets(Servlet)、Java Server Pages(JSP)、Java Message Service(JMS)等,开发出了许多应用系统。但是,在传统J2EE应用的开发过程中也出现了一些问题:
第一个是问题数据模型和逻辑模型之间的矛盾。目前使用的数据库基本上都是关系型数据库,而Java本质上是一种面向对象的语言,对象在存储和读取时使用SQL和JDBC进行数据库操作,降低了编程的效率以及系统的可维护性;
第二个是传统的J2EE应用多采用基于EJB的重量级框架,这种框架适合于开发大型企业应用,但是使用EJB容器进行开发和调试需要耗费大量时间。为了降低代码的耦合性,提高系统的开发效率,本文提出了一种基于Struts框架和Hibernate框架的J2EE应用开发策略。
数据持久层及Hibernate Hibernate是一个数据持久层框架,是一种实现对象和关系之间映射(O/R Mapping)的工具,它对JDBC进行了轻量级的对象封装,使程序员可以使用对象编程思想来操作数据库。它不仅提供了从Java类到数据表的映射,也提供了数据查询和恢复机制。相对于使用JDBC和SQL来操作数据库,使用Hibernate能大大的提高实现的效率。Hibernate框架用配置文件的形式来定义Java对象和数据表之间的映射关系,同时在更深的层面将数据表之间的关系解释为Java对象之间的继承及包含等关系。通过使用HQL语句将复杂的关系算法用对象的方式描述,在很大程度上简化了对数据的查询,加快了开发的效率。在Hibernate中有一个简单而直观的API,用于对数据库所表示的对象执行查询。要创建或修改这些对象,只需在程序中与它们进行交互,然后告诉Hibernate保存即可。这样,大量封装持久化操作的业务逻辑不再需要编写烦琐的JDBC语句,从而使数据持久层得到了极大的简化。
用Struts实现MVC架构 MVC(Model-View-Controller)由Trygve Reenskaug提出,首先被应用在SmallTalk-80环境中,是许多交互和界面系统的构成基础。根据界面设计可变性的需求,MVC把交互系统的组成分解成模型、视图、控制器三部分。 模型(Model)是软件所处理问题逻辑在独立于外在显示内容和形式情况下的内在抽象,封装了问题的核心数据、逻辑和功能的计算关系,独立于具体的界面表达和I/O操作。视图(View)把表示模型数据及逻辑关系和状态的信息及特定形式展示给用户。它从模型获得显示信息,对于相同的信息可以有多个不同的显示形式或视图。控制器(Controller)是处理用户与软件的交互操作的,其职责是控制提供模型中任何变化的传播,确保用户界面于模型间的对应联系;它接受用户的输入,将输入反馈给模型,进而实现对模型的计算控制,是使模型和视图协调工作的部件。通常一个视图对应一个控制器。模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图都应反映到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上是一种模型的变化-传播机制。
Struts框架最早是作为Apache Jakarta项目的组成部分问世运做,它继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。Struts框架很好的结合了Jsp,Java Servlet,Java Bean,Taglib等技术。在Struts中,承担MVC中控制器角色的是ActionServlet。ActionServlet是一个通用的控制组件。这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。它截取和 分发这些请求到相应的动作类(这些动作类都是Action类的子类)。另外控制组件也负责用相应的请求参数填充Action Form(FromBean),并传给动作类(ActionBean)。动作类访问核心商业逻辑,即访问Java Bean或调用EJB。最后动作类把控制权传给后续的JSP文件,由JSP文件生成视图。所有这些控制逻辑利用Struts-config.xml文件来配置。在Struts框架中,视图主要由JSP生成页面完成,Struts提供丰富的JSP标签库,这有利于分开表现逻辑和程序逻辑。模型以一个或多个Java Bean的形式存在。在Struts中,主要存在三种Bean,分别是:Action,ActionForm,EJB或者Java Bean。 Struts框架没有具体定义模型层的实现,在实际开发中,模型层通常是和业务逻辑紧密相连的,并且要对底层数据进行操作。下面介绍一种开发策略,将Hibernate引入到Struts框架的模型层中,使用它来进行数据封装和映射,提供持久化的支持。
以在J2EE应用中非常普遍的用户登录过程为例,来说明上述体系结构是如何具体运用的。登录的流程非常清晰:用户从登录页面login.jsp输入登录信息,系统对登录信息进行验证,如果正确则成功登录,否则提示相应错误信息。 在开发过程中,使用Eclipse作为开发环境,同时加载了对Struts及Hibernate提供更好的控制和支持的第三方插件MyEclipse,Web服务器使用Tomcat,数据库选用了Mysql。 首先对Hibernate进行配置,只需要对系统自动生成的hibernate.cfg.xml进行修改,配置好数据库连接的各种参数以及定义数据映射文件。由于Hibernate所带的连接池主要用于测试,性能不是很好,可以通过JNDI将其修改为使用Tomcat的连接池。
2. Spring 框架简介
Spring让开发者更轻松的实现轻量级、可扩展的J2EE架构。对于我们推荐的架构模块,让Spring提供了即时可用的实现。此外,Spring还提供了同意的应用架构方式,以及大量的中间层功能模块,能大大简化了J2EE的开发,并且比传统的开发方式更加灵活。
2.1 Spring项目的出发点
2.1.1 解决被其它框架忽略的部分
在J2EE的各个具体领域都有很多出色的解决方案----web框架、持久化方案、远程调用工具,凡此种种。然而,将这些工具整合成一个全面的架构却困难重重,甚至成为一种负担。Spring的目标就是提供一种贯穿始终的解决方案,将各种专用框架整合成一个连贯的整体架构。Spring还涉及到其它框架没有触及到的地方。例如,很少有框架提供普遍适用的事务管理或是数据库存储对象实现;即便各个领域都有很好的选择,也没有一个框架能够帮忙把所有这些东西整合到一个应用中去。因此,我们说Spring是一个应用框架,而不是web框架、IOC框架、AOP框架或者中间层框架什么的。
2.1.2 易于选择
一个框架应该有清楚的层次划分,允许用户使用其中的单项功能,而不是把自己的整个世界观强加给用户。Spring中的许多特性---例如JDBC抽象层或者Hibernation集成----都可以作为一个库单独使用,当然也可以作为Spring整体方案的一个部分。
2.1.3 易于使用
正如前面说过的,仅仅J2EE本身并不易用---很多常见的问题光靠J2EE都很难解决。一个好的基础框架首先应该让容易的任务容易完成,而不需要让应用开发人员现在就为将来的复杂需求(例如分布式事务)买单。框架应该帮助开发
人员合理使用J2EE的服务(例如JTA),同时又避免造成对服务的依赖,从而减少不必要的复杂性。
2.1.4 鼓励最佳实现
Spring力求把遵循最佳实践--例如“针对接口编程”--的成本降低到最小。另一方面,Spring又力求不强加任何架构风格,而是把选择的权利留给开发者。
2.1.5 非入侵性
一个好的基础设施框架应保持应用组态灵活和一致,避免自定义单身和工厂的需要。一个单一的风格应该是适用于所有配置的需要,从中间层的网络控制器。
2.1.6 统一配置
测试整个应用程序或单个应用程序类的单元测试应该尽可能的容易。模仿对象替换资源或应用程序的对象应该是简单的。
2.1.7 可扩展
由于Spring本身是基于接口的,而不是类,它是很容易扩展或定制。许多Spring组件使某种形式的Strategy模式,因此可以方便定制。
2.2 一个分层的应用框架
前面我们从轻量级容器(lightwight container)的角度介绍了Spring框架,并将其与别的IOC容器(例如PicoContainer) 作了比较。虽然为JavaBean设计的轻量级容器是Spring的核心概念,但这也只是所有中间层解决方案的基础而已。
2.2.1 基础构建模块
Spring是一个完整的应用框架,它可以在很懂应用层发挥作用。Spring由多个子框架组成,而且这些框架都是相对独立的。不过,只要你愿意,你就可以将它们无缝集成起来,成为一个全面的应用框架,下面讲解Spring框架的关键概念。
2.2.1.1 bean工厂
Spring轻量级IOC容器能够配置、装备JavaBean和大多数Java对象,使得开发者不必定制Singleton和自己的配置机制。Spring提供了多个“即拿即用”的bean工厂实现。其中包括一个基于XML的bean工厂。轻量级IOC容器和依赖注入(Dependency Injcction)将是本章节关注的内容。
2.2.1.2 应用上下文
Spring应用程序上下文添加消息来源和资源加载支持扩展bean工厂的概念,并提供钩到现有的环境中。不同的盒子的实现包括独立的应用程序上下文和基于Web的应用程序上下文的XML。
2.2.1.3 AOP框架
Spring的AOP框架提供的任何类的Spring轻量级容器管理方法拦截AOP支持。可以对轻量级容器管理的任何对象进行方法拦截。在bean工厂中,可以轻松的为JavaBean提供代理,从而在运行天衣无缝地将拦截器和其他的adcice整合进来。我们将在后面详细讨论Spring的AOP框架。Spring AOP的主要用途就是为了POJO提供声明性的企业级服务。
2.2.1.4 自动代理
Spring提供了一个更高的抽象层次的AOP框架和低水平的服务,同时也提供了很多基础性的服务,从而在J2EE环境中提供了类似于.NET的易用性--特别是,声明的企业提供的服务可以通过源代码级的元数据驱动的。
2.2.1.5 事务管理
Spring提供了一个通用的交易管理基础设施,可插拔的交易策略(例如JTA和JDBC)和不同的事务划分方式。后面会详细介绍Spring事务管理的基本原理,及其强大的威力和灵活性。
2.2.1.6 DAO的抽象
Spring定义一组通用的数据访问异常,在创建通用的DAO接口时可以用这些异常类型抛出有意义的异常信息,,独立于底层的存储机制。后面阐述了更多的细节讨论Spring对DAO的支持,以及针对JDBC JDO,Hibernate的不同实施策略。
2.2.1.7 JDBC的支持
Spring提供了两个层次的抽象,使得编写基于JDBC的DAO特别简单:org.springframework.jdbc.core包提供了基于模板、回调的JDBC用法,org.springframework.jdbc.object包则把关系数据库操作建模为可服用对象。比起直接使用JDBC,用Spring 的JDBC包可以提供更大的生产力和消除常见的错误,如泄漏等。Spring JDBC抽象层集成了事务抽象和DAO的抽象。
2.2.1.8 集成O/R映工具
Spring提供了多种O/R映射工具的支持,如Hibernate,JDO和ibatis数据库简化资源设置,采集,和释放,并且将O/R映射与整个事务和DAO抽象集成起来。这些集成软件包允许应用程序分配自定义ThreadLocal会话和本地事务进行处理,不必考虑底层究竟采用哪种O
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[484679],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。