J2EE轻量级框架在Web开发中的研究与应用-----以“对公信贷产品补录”系统为例---毕业论文_第1页
J2EE轻量级框架在Web开发中的研究与应用-----以“对公信贷产品补录”系统为例---毕业论文_第2页
J2EE轻量级框架在Web开发中的研究与应用-----以“对公信贷产品补录”系统为例---毕业论文_第3页
J2EE轻量级框架在Web开发中的研究与应用-----以“对公信贷产品补录”系统为例---毕业论文_第4页
J2EE轻量级框架在Web开发中的研究与应用-----以“对公信贷产品补录”系统为例---毕业论文_第5页
免费预览已结束,剩余53页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

J2EE轻量级框架在Web开发中的研究与应用本科毕业论文(科研训练、毕业设计)题 目:J2EE轻量级框架在Web开发中的研究与应用-以“对公信贷产品补录”系统为例姓 名:学 院:软件学院系:软件工程专 业:软件工程年 级: 学 号:校内指导教师: 职称:校外指导教师: 职称:年 月 日摘 要随着Internet技术和企业信息化的发展,构建基于Web的应用系统的需求越来越复杂,开发周期要求越来越短,同时对系统的稳定性、扩展性和可维护行要求也越来越高。基于J2EE的多层Web体系结构逐渐发展成熟,多层的Java Web应用开发已经成为主流。目前基于J2EE平台的MIS应用系统框架主要有两大阵营:基于EJB的复杂度较高的重量级框架和一些基于POJOs(Plain Old Java Objects)的开源的轻量级框架。但是,J2EE的核心EJB组件由于它的复杂性,给业务逻辑层的开发增加了难度,并且它需要EJB容器的支持,又增加了开发代价。于是怎样快速的构建一个具有可重用性、可扩展性和易维护的Web应用成为J2EE开发的首要问题。本文首先讨论了J2EE平台在Web开发中的核心技术以及开发的一般步骤。接下来介绍旨在简化J2EE信息系统开发的Spring轻量级框架。针对系统的层次耦合度与横切关注点等关键问题,论文提出了采用控制反转模式来降低J2EE多层应用系统中层与层之间的耦合度;采用面向方面编程方法来处理应用系统中散落在各模块中的横切关注点,从而分离了核心业务代码与辅助功能代码。然后介绍了JSF的技术架构,分析了它的技术特色和优势,研究如何开发基于JSF框架MVC模式的Web应用程序,体现了JSF框架在构建可维护性和可扩展性等方面很强的技术特点。最后以基于Web应用的中国建设银行CMISII系统为例,详细讨论了JSF和Spring集成框架在该系统中的应用。实践表明,应用J2EE轻量级框架可以提高系统开发的效率,同时满足系统扩展性和可维护性的要求。关键词:J2EE;Spring;JSFAbstractWith the development of Internet and enterprise information construction, the requirements of Web-based application system have become more complex,the development cycle is increasingly shorter.The multi-tier Web architecture based on J2EE graduall perfect, Multilayer Java Web application development has become prevalent.Currently,there are lots of frameworks base on the J2EE. Some of them are based on EJB while the rest are based on the POJOs(Plain Old Java Objects) lightweight concept.The EJB of the core J2EE componet,because of its complexity,incresed the difficulties of the development of business logic tier,and it needs the support of EJB containers, increased development costs.So it become the primary J2EE development issues how fastly build a reusable,scalability and maintaining Web application.This paper first discussed the J2EE platform in Web development of core technology and the development of the general steps.Then introduces Spring framework that aims to simplify J2EE development.In view of the coupling betweent architectural layers, this paper adopts Inversion of Control design pattern to promote loose coupling between architectural layers of the web application system based on J2EE.In order to separate the core business code and the auxiliary function code,this paper takes advantage of Aspect-Oriented Programming method to separate the cross-cutting whick is scattered over various modules.Then introduce the JSF technology framework of its technical characteristics and advantages, how to develop the framework based on the JSF MVC model of Web applications, reflects the JSF framework in the construction of maintainability and scalability, and other aspects of the highly technical characteristics .Finally, the Web-based application CMISII management system as an example, this paper discussed the role of JSF and Spring framework in the system.ALL the pratice shows that the application of this J2EE lightweight framework can improve the efficiency of Web system development, while meeting system scalability and maintainability requirements.Key words: J2EE; Spring; JSF目录第一章 绪论91.1 背景介绍及研究意义91.2 相关领域研究现状91.2 课题研究的意义101.3 本文的主要工作10第二章 系统开发中的相关核心技术简介122.1 J2EE 简介122.2 J2EE平台体系架构122.3 J2EE平台传统方式的不足142.4 为什么要使用轻量级框架?152.5 Spring框架152.5.1 Spring 框架简介152.5.2 使用Spring的IoC容器172.5.3 使用Spring的AOP202.6JSF框架242.6.1 JSF概述242.6.2 JSF框架的工作原理252.6.3 JSF的生命周期27第三章 “对公信贷产品补录”系统概要设计315.1 业务需求315.2 开发环境325.3 生产环境325.4 主要功能点描述325.4.1对公合同信息补录325.4.2 客户关系管理类型信息录入335.5 系统工作流345.6 系统角色定义355.7 系统架构设计365.8 类模型设计375.9 数据库设计375.10 E/R模型图385.10.1 E / R图385.10.2映射指标39第四章 “对公信贷产品补录”系统详细设计414.1 业务服务层详细设计414.1.1 J2EE_Service名称414.1.2 J2EE_Service功能414.1.3 J2EE_Service方法(部分)414.1.4 J2EE_Service对象注入434.2 表示层详细设计434.2.1界面方案444.2.2 BackingBean定义444.2.3 在应用配置文件中注册受控Bean464.2.4 添加事件464.2.5 导航规则474.2.6 JSP界面484.3系统包结构494.4 项目总结50第五章 总结51致谢52参考文献53ContentChapter1 Introduction91.1 Background information and research significance91.2 相关领域研究现状91.2 课题研究的意义101.3 本文的主要工作10第二章 系统开发中的相关核心技术简介122.1 J2EE 简介122.2 J2EE平台体系架构122.3 J2EE平台传统方式的不足142.4 为什么要使用轻量级框架?152.5 Spring框架152.5.1 Spring 框架简介152.5.2 使用Spring的IoC容器172.5.3 使用Spring的AOP202.6JSF框架242.6.1 JSF概述242.6.2 JSF框架的工作原理252.6.3 JSF的生命周期27第三章 “对公信贷产品补录”系统概要设计315.1 业务需求315.2 开发环境325.3 生产环境325.4 主要功能点描述325.4.1对公合同信息补录325.4.2 客户关系管理类型信息录入335.5 系统工作流345.6 系统角色定义355.7 系统架构设计365.8 类模型设计375.9 数据库设计375.10 E/R模型图385.10.1 E / R图385.10.2映射指标39第四章 “对公信贷产品补录”系统详细设计414.1 业务服务层详细设计414.1.1 J2EE_Service名称414.1.2 J2EE_Service功能414.1.3 J2EE_Service方法(部分)414.1.4 J2EE_Service对象注入434.2 表示层详细设计434.2.1界面方案444.2.2 BackingBean定义444.2.3 在应用配置文件中注册受控Bean464.2.4 添加事件464.2.5 导航规则474.2.6 JSP界面484.3系统包结构494.4 项目总结50第五章 总结51致谢52参考文献53第一章 绪论1.1 背景介绍及研究意义随着Internet技术的发展和Web信息系统的广泛应用,基于MVC的多层架构设计思想已成为解决B/S系统体系结构的成功模式,因此在Web前端开发、业务逻辑管理、数据持久层等诸多领域涌现出大量实用工具和框架,其中在前端开发领域出现基于UI(User Interface)组件构建Web界面的JSF(Java ServiceFaces),基于对象/关系数据库映射(Object/RelationalMapping, ORM)解决数据持久层问题的Hibernate和提供IoC(Inverse of Control)、AOP(Aspect-OrientedProgramming)服务的Spring Framework成为目前Java社区的讨论热点。通过整合以上技术,可以得到一个构建具有灵活性、低耦合及易于维护的Web信息系统解决方案。中国建设银行为在实现信贷资产总行集中的基础上,构建全行全口径信贷信息的统一发布平台;实现信贷风险分类标准的提升,深化分类数据应用,满足对外披露和内部精细化管理要求;整合信贷信息采集渠道,减轻一线人员工作量;构建稳定、独立、多维的信贷基础指标体系和信贷数据质量检核体系;利用灵活的报表工具,满足业务多元化需求;开发可配置接口,持续支持ERPF、征信等系统应用数据的供应;在此基础上根据业务部门提出的各项要求,决定构建新一代信贷管理信息系统(以下简称CMISII)系统。CMISII系统总体建设目标为足总分行分析需求,实现信贷数据总行级集中,建设全行统一口的对外信息发布平台。CMISII的数据源由原来手工录入信贷数据改为直接接入源系统的方式,进一步减轻一线员工的工作压力。“对公信贷产品补录”模块是CMISII系统的子系统模块,属于CMISII的对公帐务调整范畴。本论文将以该模块的实现为例子,证明J2EE轻量级框架的可行性与优点。1.2 相关领域研究现状从1999年开始,伴随着B/S(Browser/Server,浏览器/服务器)架构逐渐引入企业应用软件开发领域,J2EE就逐渐成为企业应用开发的主流技术。J2EE提供了中间层集成框架,用来满足可用、可靠及可扩展的应用需求。通过统一的开发平台,J2EE降低了开发多层Web应用信息系统的成本和复杂度;支持EJB(Enterprise JavaBeans);支持对现有应用程序的集成;提高了异构环境的协同工作能力;支持打包和应用部署;增强了安全机制;提高了性能。然而,自从1999-2000年J2EE应用程序广泛实现以来,J2EE在实践中并没有获得绝对的成功,其中最主要的因素就是经典J2EE架构中的核心技术-EJB组件模型过于复杂。为了在J2EE应用程序中实现业务逻辑时降低复杂性,SUN公司于 1998年3月发布EJB1.0规范;虽然每一个EJB规范版本中都有这句话“EJB将使系统开发变得容易”,但在实际中EJB从来没有实现过它的本来目的简化企业级应用系统开发。EJB的声明式编程模型确实简化了很多基础设施层面的开发,如事务和安全,但在部署文件维护和各种接口 (home、remote/local接口)实现等方面变得很复杂。开发人员慢慢地不再对EJB痴迷,结果这几年EJB的普及率持续下降,很多开发人员开始寻找其它简单的方法。为了解决J2EE经典架构中的问题,一系列非EJB架构的轻量级框架 (Lightweight Framework)便应运而生了。轻量级框架的目标就是用更简单、更易于管理的方式提供许多“即开即用”的J2EE服务;在支持好的实践的同时,它们尽量使框架本身不可见,最重要的是它们致力于使开发者能够首先使用 Pojo(Plain Old Java Objeet,普通的Java对象),而不是类似EJB这样的特殊对象。在这些轻量级框架中,Spring框架是最流行,也是最具挑战性的。Spring是惟一处理典型的J2EE应用程序中所有结构层的,也是惟一提供轻量级容器连同全方位服务的框架。Spring框架致力于以一致的、高效的方式构造整个应用程序,将单层框架的最佳组合揉合在一起建立一个连贯的体系结构。1.2 课题研究的意义 1.3 本文的主要工作论文首先对J2EE的核心技术进行了介绍,包括J2EE的四层体系结构、组件与容器,分析了使用经典J2EE体系架构开发企业应用的不足,引入了旨在简化J2EE信息系统开发的Spring和JSF轻量级框架。对Spring框架进行了深入的研究分析,尤其是Spring的两大核心机制IOC和AOP(Aspeet Oriented Pogramming,面向方面编程),阐述了采用 Spring IoC解决系统中代码之间依赖性过高的问题;采用 Spring AOP分离系统中贯穿于多个模块的横切关注点,从而解决系统中代码分散和代码混乱的问题。再介绍JSF框架,分别阐述了JSF的架构模型和工作原理,然后分析集成JSF和Spring框架的web系统架构。最后给出建设银行信贷管理系统中的“对公信贷产品补录”模块实施JSF和Spring的过程,证明了J2EE轻量级框架的可行性与优点。对公信贷流程管理系统(CLPM)作为CMISII的对公信贷数据来源,目前还不是建行全口径对公信贷业务系统,有一些产品还不在CLPM系统流程管理中,如CLPM系统缺少贴现、受让信贷资产、买入票据、买入企业返售债券、转贷买方信贷、贷款承诺书等业务,CMISII从源系统接收过来的数据也缺少相应的产品信息,为了保证CMISII对外披露报表数据的完整性和准确性,必须对这部分数据需要进行补录。我将通过这个完整的Web应用程序来演示如何利用Spring和JSF框架来构建灵活的、可扩展的Web应用程序。在“对公信贷产品补录”模块应用中,严格按照了JavaEE多层架构模型,保证了各层之间相对独立,简化了每一层的设计和实现,并且使得后期的维护和扩展更加容易。对于每一层的设计和实现,都以Bean的形式配置在Spring的IoC容器。第二章 系统开发中的相关核心技术简介JAVA最初是在浏览器和客户端机器中粉墨登场的。当时,很多人质疑它是否适合做服务器端的开发。现在,随着对JAVA2平台企业版(J2EE)第三方支持的增多,JAVA被广泛接纳为开发企业级服务器端解决方案的首选平台之一。2.1 J2EE 简介J2EE是一个开放的、基于标准的开发和部署的平台,用于构建N层的、基于Web的、以服务端计算为核心的、模块化的企业应用。J2EE同时也是所有兼容J2EE标准的应用服务器产品的统一标识。Sun公司领导着J2EE规范和标准的制定,但同时很多公司如IBM、BEA也为该标准的制定贡献了很多力量,所以J2EE每一个新规范的推出,都体现着整个业界对技术的共同认同。大家都遵守着“在标准上进行合作,在产品上进行竞争”的原则,从而使J2EE在技术规范上日臻完善和进步,同时又有各厂家实现J2EE规范的应用服务器产品在市场上推出,在性能上、价格上互相竞争,为最终用户提供多样化的选择。2.2 J2EE平台体系架构J2EE平台由一整套服务(SERVICES)、应用程序接口(APIS)和协议构成,它对开发基于WEB的多层应用提供了功能支持。包括支撑J2EE的13种核心技术:JDBC, JNDI, EJBS, RMI, JSP, JAVA SERVLETS, XML, JMS, JAVA IDL, JTS, JTA, JAVAMAIL 和 JAF。图2.1 J2EE平台体系架构从图2.1可以看出,J2EE技术是在J2SE的基础之上,提供了企业计算所必须的服务如事务、安全性、消息服务等。J2SE平台提供Java运行时环境的标准功能,如对跨平台开发的支持和内存管理等。J2EE应用的组件如企业JavaBean(EJB)、JSP和Servlet运行于J2EE容器之中,通过连接器访问企业信息系统,如数据库系统、ERP系统和其他应用程序系统。J2EE应用可以集成一系列的客户端,包括独立运行的台式客户端、无线客户端,以及基于Web浏览器的客户端等。J2EE平台为开发企业应用提供了高性能、高可靠性和可伸缩性的运行支撑环境。J2EE提供了一个多层的端到端的应用系统架构,如图2所示。在客户端层,多种客户端可通过多种不同的协议来访问中间层的J2EE服务,在设计J2EE应用的时候,首先需要选择的就是J2EE客户端的类型,应根据用户的使用模式及应用环境的特点来选择适合的客户端类型和通信协议,如Java Applet客户端和Java Web Start客户端适合于复杂的图形用户界面,如大量的数据录入、数据统计等应用,能满足高效的用户交互需求,根据具体应用环境的不同,可选择HTTP(S)、RMI/IIOP或JNLP等通信协议。图2.2端到端的多层应用系统架构在中间层,主要包括Web服务器和应用服务器。在实际部署时,它们可以运行于单一的或多个物理平台上。从可靠性和可伸缩性考虑,应该采用多个Web服务器和应用服务器。Web服务器接受从客户端发来的请求,通过JSP和Servlet技术动态生成响应的内容,JSP或Servlet可以接着调用运行于应用服务器EJB容器中的企业 JavaBean进行相应的业务处理和运算。而中间层通过标准的协议访问企业信息系统层来读取数据和调用服务。总之,J2EE为我们提供了一个建立在开放和标准的技术之上、非常灵活的端到端的多层体系架构,从而满足各种不同企业应用的需求。2.3 J2EE平台传统方式的不足虽然J2EE给诸如事务管理之类的核心中间层概念带来了受人欢迎的标准化,但是,大部分J2EE应用程序都过于复杂,难于开发,而且性能令人失望。Spring之父 RodJohnson以其大量的商业项目开发经验分析了J2EE应用程序的复杂性和其它问题的具体成因。n EJB组件模型过于复杂构思EJB是作为在J2EE应用程序中实现业务逻辑时降低复杂性的一种方法;不过,实际上这一目的从未取得成功。EJB本来是为内部分布式的事务性应用程序设计的,但是几乎所有重要的应用程序都是事务性的,而分布式不应该成为基本组件模型的组成部分。n 许多J2EE应用程序不恰当地使用了分布式对象模型不恰当使用分布式对象模型是导致过度代码和代码重复的主要原因之一;内部分布式应用程序比共处一地的应用程序更加复杂,而且其性能通常也更差。n J2EE应用程序容易包含过量的衔接代码分析现有的J2EE应用程序,可以发现大量的代码毫无用处:JNDI查询代码、传输对象、获取和释放JDBC资源的try/catch代码块等等。编写和维护这样的衔接代码无疑会占用大量的项目资源和人力资源,而这些资源应该集中用于应用程序的业务领域。n J2EE应用程序难以进行单元测试J2EE API,尤其是EJB组件模型的设计并没有考虑到单元测试的简易性。通过API和隐式规范,在应用程序服务器之外对基于EJB和许多其它J2EEAPI的应用程序进行测试,其困难程序超乎想象。2.4 为什么要使用轻量级框架?传统J2EE架构里面的EJB在带来了全新的企业级开发模型的同时,也带来了很多不必要的复杂性,编写EJB组件需要完成复杂而工作量巨大的接口编写。随着越来越多的开发人员,并试图以更简单的Java技术来简化JavaEE应用的开发。Rod Johnson总结了他数年的JavaEE项目经验,在Expert-One-on-One:JavaEE Design & Development一书中详细阐述了JavaEE体系尤其是EJB带来的复杂性,并提出了一系列以轻量级啊框架为核心的全新的JavaEE设计思想来设计大型项目架构。有了轻量级框架,我们终于可以轻松实现过去必须使用复杂而烦琐的EJB才能实现的功能。更重要的是,轻量级框架抛弃了EJB这种重量级组件,以JavaBean作为组件来实现业务逻辑。由于不再需要EJB,基于轻量级框架的JavaEE应用完全可以抛弃EJB服务器,而仅仅需要Web服务器即可。更重要的是,以JavaBean作为组件模型使得组件的开发和测试得到极大的简化。从软件层次结构的角度来说,软件的框架要具有较高的伸缩性和可扩展性,而基于轻量级框架的J2EE 架构开发简洁、结构清晰,有很好的可扩展性和可维护性,非常适于面向对象的设计与开发。接下来我们将重点介绍为实现本文提到的“对公信贷产品补录”模块所用到的两个非常优秀的轻量级框架。2.5 Spring框架2.5.1 Spring 框架简介Spring包含许多功能和特性,并被很好地组织在下图所示的七个模块中。u SpringCore(核心容器)Spring的所有模块都是建立在核心容器之上的,核心容器为Spring框架提供了基础功能,规定了如何创建、配置和管理Bean,以及很多Spring的具体细节。这个模块中的BeanFactory类是所有基于Spring框架系统的核心,BeanFactory采用工厂模式来实现IOC,将系统的配置和依赖关系从代码中独立出来。u SpringContext(上下文模块)Spring应用上下文模块直接位于Spring核心模块之上,上下文模块扩展了BeanFactory,添加了对 nSN(国际化)、系统生命周期以及验证的支持。另外,这个模块提供了很多企业级服务,如电子邮件服务、用JNDI访问、EJB集成、远程调用以及定时服务,并且支持与模板框架(如Velocity和FreeMarker)的集成。u SpringAOPAOP,即面向方面编程,允许开发者动态修改oOP(面向对象编程)定义的静态模型,而不用修改原来的00模型,即可完成对横切面问题的解决。SpringAOP实现了AOP联盟约定的接口,允许开发者不需要EJB容器,只需借助于Spring的事务抽象框架便能够在EJB容器外部使用诸如事务管理服务。u SpringDAOSpringDAO(DataAccessObject),即数据访问对象,便于开发者以标准的方式使用各种数据访问技术,如JDBC、Hibemate或JDo。SpringDAO提供了JDBC的抽象层,它可以消除冗长的JDBC编码和解析数据库厂商特有的错误编码。 SpringDAO抽象允许开发者在不同数据访问技术间切换,而且在互换的同时不用考虑异常处理。因为无论采用哪种DAO技术,Spring都提供了统一的异常处理机制。另外,这个模块利用 SpringAOP模块为Spring系统中的对象提供事务管理服务。u SpringORMSpringORM为当前流行的。O/R映射(Object/Relational Maping)技术提供了集成。Spring框架没有自己的ORM解决方案,但它为许多流行的ORM框架做了钩子程序,包括Hibernate、JDo和 iBATIS SQL Maps。Spring的事务管理支持所有这些ORM框架以及JDBC。u Spring Web SpringWeb模块建立在应用上下文模块的基础之上,提供了适合Web系统的上下文。另外,该模块还支持多项其它面向Web的任务,如透明处理多文件上传请求,自动将请求参数绑定到业务对象中等。Spring Web模块还包括对Struts、JSF、Tapestry等第三方Java Web MVC框架的集成支持。u Spring Web MVCSpring为Web系统提供了全功能的MVC框架。虽然Spring可以很容易地与其它MVC框架集成,但是Spring的MvC框架可以利用IOC将控制逻辑和业务逻辑清晰地分离开来。另外,Spring的MVC框架还可以使用Spring的其它服务,如信息国际化和验证服务。从整体上看,组成Spring的7个模块为开发人员提供了开发企业级Web应用所需要的一切,但Spring并没有限制开发人员必须把应用完全建立在Spring框架之上。图3.1 Spring核心框架2.5.2 使用Spring的IoC容器IoC 就是方向控制的意思。反向控制是Spring框架的核心。但是,反向控制是什么意思?到底控制的什么方面被反向了呢?2004年美国专家Martin Fowler发表了一篇论文Inversion of Control Containers and the Dependency Injection pattern阐述了这个问题,他总结说是获得依赖对象的方式反向了,根据这个启示,他还为反向控制提出了一个更贴切的名字:Dependency Injection(DI 依赖注入)。通常,应用代码需要告知容器或框架,让它们找到自身所需要的类,然后再由应用代码创建待使用的对象实例。因此,应用代码在使用实例之前,需要创建对象实例。然而,IoC模式中,创建对象实例的任务交给IoC容器或框架(实现了IoC设计模式的框架也被称为IoC容器),使得应用代码只需要直接使用实例,这就是IoC。相对IoC 而言,“依赖注入”的确更加准确的描述了这种设计理念。所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中。任何重要的系统都需要至少两个相互合作的类来完成业务逻辑。通常,每个对象都要自己负责得到它的合作(依赖)对象。你会发现,这样会导致代码耦合度高而且难于测试。使用IoC,对象的依赖都是在对象创建时由负责协调系统中各个对象的外部实体提供的,这样使软件组件松散连接成为可能。下面示意了Spring IoC 应用,步骤如下:(1)首先编写两个Bean类ExampleBean 类:public class ExampleBean private String psnName=null; private RefBean refbean=null; private String addinfo=null; public String getAddinfo() return getRefbean().getAddress() + getRefbean().getZipcode(); public String getPsnName() return psnName; public void setPsnName(String psnName) this.psnName = psnName; public void setRefbean(RefBean refbean) this.refbean = refbean; public RefBean getRefbean() return refbean; public void setAddinfo(String addinfo) this.addinfo = addinfo; RefBean类:public class RefBean public String getAddress() return address; public void setAddress(String address) this.address = address; public String getZipcode() return zipcode; public void setZipcode(String zipcode) this.zipcode = zipcode; private String zipcode=null; private String address=null;(2)其xml配置文件 Bean.xml xkf BeiJing 100085 (3) 然后可以写个测试类来测试需要Spring中的Spring-core.jar以及commons-logging.jar,当然在elipse中可以通过安装Spring-ide插件来轻松实现。public class Test public static void main(String args) try Resource input = new ClassPathResource(test/Bean.xml); System.out.println(resource is:+input); BeanFactory factory = new XmlBeanFactory(input); ExampleBean eb = (ExampleBean)factory.getBean(exampleBean); System.out.println(eb.getPsnName(); System.out.println(eb.getAddinfo(); catch(Exception e) e.printStackTrace(); 这样,通过BeanFactory的getBean方法,以及xml配置文件,避免了在test类中直接实例化ExampleBean,消除了应用程序(Test)与服务(ExampleBean)之间的耦合,实现了IOC(控制反转)或者说实现了依赖的注射(Dependency Injection)。2.5.3 使用Spring的AOP AOP的意思是面向方面编程,英文全称是Aspect Oriented Programming,它使开发人员可以更好地将本不该彼此粘合在一起的功能分离开。开发人员在编写应用程序时,通常包含两种代码:一种是和业务系统有关的代码,一是和业务系统关系不大的代码,例如日志、权限、异常处理、事务处理等。以前编写代码时,这两种代码基本是写在一起的,这样在程序中,到处充满着相同或类似的代码,例如日志信息的输出,每个方法都要写日志的输出,不利于程序的维护。而AOP就是使这两种代码分离的思想。使用AOP,就不用在业务逻辑中实现与业务功能关系不大的代码,从而降低了两种代码的耦合性,达到易于维护和重用的目的。AOP,从字面的意思来理解就是面向方面编程,但却容易让初学者一头雾水,很多资料也都对AOP进行过解释,但过多地从理论的角度进行讲解其实用性,这里不再多讲,仅用一个例子来说明:基本上每个方法都要用日志进行记录,那么如果按照面向对象的思路来说,就是每个对象都有记录日志这样一个行为。要在每个方法里添加日志的信息,必然会产生大量的重复代码,但可以将记录日志看作是一个横切面,所有对这些方法的调用都要经过这个横切面,然后在这个横切面进行记录日志的操作,这样就达到代码重用和易于维护的目的了,这就是AOP的思想。通常,系统由很多组件组成,每个组件负责一部分功能,然而,这些组件也经常带有一些除了核心功能之外的附带功能 。系统服务如日志、事务管理和安全经常融入到一些其他功能模块中。这些系统服务通常叫做交叉业务,这是因为它们总是分布在系统的很多组件中。通过将这些业务分布在多个组件中,给我们的代码引入了双重复杂性。(1) 实现系统级业务的代码在多个组件中复制。这意味着如果你要改变这些业务逻辑,你就必须到各个模块去修改。就算把这些业务抽象成一个独立模块,其它模块只是调用它的一个方法,但是这个方法调用也还是分布在很多地方。(2) 组件会因为那些与自己核心业务无关的代码变得杂乱。一个向地址录中添加条目的方法应该只关心如何添加地址,而不是关心它是不是安全或支持事务的。此时,我们该怎么办呢?这正是AOP用得着的地方。AOP帮助我们将这些服务模块化,并把它们声明式地应用在需要它们的地方,使得这些组件更加专注于自身业务,完全不知道其它涉及到的系统服务。这里的概念切面,就是我们要实现的交叉功能,是应用系统模块化的一个方面或领域。切面的最常见例子就是日志记录。日志记录在系统中到处需要用到,利用继承来重用日志模块是不合适的,这样,就可以创建一个日志记录切面,并且使用AOP在系统中应用。图3.4展示了切面应用方式图3.4 应用切面其中,通知Advice是切面的实际实现。连接点Joinpoint是应用程序执行过程中插入切面的地点,这个地点可以是方法调用,异常抛出,甚至可以是要修改的字段,切面代码在这些地方插入到你的应用流程中,添加新的行为。切入点Pointcut定义了Advice应该应用在那些连接点,通常通过指定类名和方法名,或者匹配类名和方法名式样的正则表达式来指定切入点。下面我们以一个例子来说明,如何在Spring框架的帮助下实现AOP编程。(1)在这个例子中,我们将实现一个before advice,这意味着advice的代码在被调用的public方法开始前被执行。以下是这个before advice的实现代码。public class TestBeforeAdvice implements MethodBeforeAdvice public void before(Method m, Object args, Object target) throws Throwable System.out.println(Hello world! (by + this.getClass().getName() + );接口MethodBeforeAdvice只有一个方法before需要实现,它定义了advice的实现。before方法共用3个参数,它们提供了相当丰富的信息。参数Method m是advice开始后执行的方法,方法名称可以用作判断是否执行代码的条件。Object args是传给被调用的public方法的参数数组。当需要记日志时,参数args和被执行方法的名称都是非常有用的信息。你也可以改变传给m的参数,但要小心使用这个功能;编写最初主程序的程序员并不知道主程序可能会和传入参数的发生冲突。Object target是执行方法m对象的引用。(2)在下面的BeanImpl类中,每个public方法调用前,都会执行advice,代码如下。publ

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论