AOP在Spring框架中的应用

时间:2022-09-17 11:33:41

AOP在Spring框架中的应用

摘要:Spring AOP模块直接将面向切面的编程功能集成到了Spring框架中,所以可以很容易的使Spring框架管理的任何对象支持AOP。该文以实际项目为例,阐述了利用AOP的技术优势和应用价值。

关键词:Spring;Web;AOP;IoC

中图分类号:TP311文献标识码:A文章编号:1009-3044(2009)26-7420-02

The Research of AOP on Spring Framework

WANG Xiao-jun1, ZHANG Dian-long2

(1.Department of Computer Engineering, Shandong College of Information and Technical, Weifang 261061, China; 2.Department of Software Engineering, Shandong College of Information and Technical, Weifang 261061, China)

Abstract: Spring is a programming framework, that implements the techonology about Aspect-Oriented Programming. So anyone can make the Spring framework that manage any object to support AOP easily. This paper bases on the realized project,that it has expatiated on the technological advantage and application value by using AOP.

Key words: Spring; Web; AOP; IoC

当Java在Web开发领域获得前所未有的成功之后,Web程序员纷纷从PHP、ASP等技术阵营转移到Java阵营。然而随后几年Java程序员在开发EJB时,发现它过于复杂,且难以进行单元测试,恰巧这个时候,.NET技术开始发展起来。Java阵营迫切需要一个实用的框架来加速Web和企业级软件的开发,以Spring为代表的轻量级框架应运而生。

1 开源框架 Spring简介

1.1 Spring简介

Spring是一个非常优秀的轻量级开源框架,由RodJohnson创建,其组成部分从Web MVC一直到数据持久化访问,是一个完整程序结构体系。简单地说,Spring是一个轻量级的IoC和AOP容器框架,通过Spring的IoC容器,我们将关注点放在需要实现的业务逻辑上。对AOP的支持则能动态的增强业务方法。Spring既是全面的又是模块化的。Spring有分层的体系结构,这意味着开发者能选择使用它任何一个独立的部分,而它的架构又是内部一致。Spring不会给你的工程添加对其他的框架依赖。Spring可以称得上是个一站式解决方案,提供了一个典型应用所需要的大部分基础架构。它还涉及到了其他framework没有考虑到的内容。Spring不强迫你必须在每一层中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块。

Spring之所以能迅速在Java开发人员中流行,是因为Spring具有以下特点。

1)设计良好的分层结构,使得开发人员可以很简单的进行扩充,并引入先进的设计理念。

2)以IoC为核心,促使开发人员面向接口编程,可以养成良好的编程习惯,从而便于程序的扩充和维护。

3)良好的架构设计,使得应用程序尽可能的依赖应用程序的环境,从而使应用脱离了环境的影响。

4)Spring能够代替EJB。如果开发人员原来使用EJB,那么使用Spring后还可以继续使用EJB。如果从头开始开发应用程序,则使用Spring提供的功能就可以代替EJB。

5)Spring MVC很好的实现了MVC2,并提供了很简单的对国际化开发与资源的支持,而且可以与Spring提供的IoC和AOP联系起来。

6)Spring可以与其他框架良好的结合,例如Struts、Hibernate等结合,这使应用开发更为容易。

1.2 Spring AOP原理

AOP全称Aspect-Oriented Programming 中文直译为面向切面(方面)编程,用于解决OOP中无法很好解决的问题。它从另一个角度来考虑程序结构以完善面向对象编程,OOP将应用程序分解成各个层次的对象,而AOP将程序分解成各个方面或者说关注点,这使得可以模块化诸如事务管理等这些横切多个对象的关注点。

大多数AOP定义都是关于如何使交叉业务模块化。如图2所示显示的是业务交叉的示意图。如果由于需求的变更,我们要取消一部分方法中的开启事务或结束事务处理的功能,此时,我们就需要手工逐一删除这些方法中的事务处理语句。使用AOP可以在一个地方定义通用功能,只要声明是定义何时何地应用这些功能,就可以在需要新功能的地方修改代码。

2 Spring中的AOP实现及应用

Spring框架中包含一个AOP实现,是Spring框架的重要组成部分,实现了AOP规范约定的接口。Spring中的AOP主要使用基于拦截器的方式,能够创建连接点,能够对方法调用连接点进行相关的拦截。Spring使用纯Java的方式来实现AOP,Spring AOP的植入过程是在运行是由Spring使用Java的机制来完成的。Spring AOP依赖于Spring的核心IoC容器,并与容器融为一体,因此可以在配置文件中声明应用AOP功能。

在Spring配置文件中分别配置通知、切入点、切面,然后使用工厂Bean等配置业务对象的,按部就班的进行Spring AOP的配置。

2.1 创建通知

Spring的连接点是建立在方法拦截基础上的,这意味着Spring通知可以在方法调用的各个地方植入系统中。因为Spring可以在方法执行的各个地方植入通知,所以通知有不同的类型。

2.2 定义切入点

切入点是根据类的方法是否满足特定的规则,来决定是否在合适的地方植入通知。切入点的描述重点是方法的描述。方法的描述涉及到几个方面,包括方法名称的描述、所带的参数、所处的类、执行的流程等。

Spring框架中的切入点主要分为静态切入点和动态切入点。其中静态切入点基于方法和目标类进行切入点判断而不考虑方法的参数。在大多数情况下,静态切入点是高效的、最好的选择。Spring只在第一次调用方法时执行静态切入点,以后每次调用这个方法时就不需要再执行,所以性能比动态切入点好。

2.3 定义

的工作机制很简单,就是当我们需要使用某一个类时,由Spring通过一定的机制,创建一个我们所需类的对象,对象跟实际对象实现相同的接口或者是实际对象类的一个子类。当执行对象上的一个方法时,其交由一个回调对象来处理,而我们可以自定义这个回调对象,从而加入自定义的程序逻辑,即AOP中通知。因此,在系统中就需要一个负责根据一定的策略,创建对象的工厂角色,在Spring的AOP实现中,ProxyFactoryBean正是扮演了这个角色。

3 AOP应用实例

考虑一个超级玛丽游戏设计,在游戏的初始化后,人物每次前进一步都可能碰见方块的阻挡,玛丽是否打碎砖块?定义GameRole接口,利用四个方法表示玛丽的行走。四个方法都是简单的坐标变换,而在游戏中重要的就是玛丽在行走的过程中会遇到一些方块,打碎这些方块会爆出一些东西,也就是说四个方法都应该调用一个doBox()方法来表示打碎物品后的处理。

在四个方法中都应有doBox()方法,而该方法可能有很多的内容,同时玛丽还有可能增加飞行和游泳等动作,这样就造成了大量的代码重复,这个时候就要考虑使用AOP来解决了。

编写一个切面,定义doBox方法作为行走方法的后置通知;首先定义一个名为afterPointcut的切点;接着定义一个后置通知;编写配置文件game-config.xml:

最后定义一个游戏运行代码。

当然这只是一个简单的模拟游戏,实际还有很多问题这里没有解决,不过只要熟悉了AOP的使用,一定可以将游戏制作的是否完善。经过这样设计的系统,符合MVC设计模式,合理的划分了系统层次,实现了松散耦合的思想。同时加快了系统的开发速度,增加了系统整体部署的可伸缩性,改善了系统的应用性能。

4 结束语

本文探讨了一种新的编程思想和开发技术,借助Spring AOP,使得Spring成为成功的J2EE架构框架,它使得开发人员可以集中关注于系统的核心商业逻辑,使用AOP来灵活处理一些具有横切性质的系统级服务,已经成为一种非常适用的解决方案。

参考文献:

[1] 张国平,万仲保,刘高原.Spring AOP框架在J2EE中的应用[J].微计算机信息,2007(36):254.

[2] 罗时飞.精通Spring2.0[M].北京:电子工业出版社,2007:43-198.

[3] 石丹丹.面向方面编程模式的探讨[J].武汉理工大学学报,2005,27(1):93-95.

[4] 张钰.精通Spring 2.x Java Web开发[M].北京:电子工业出版社,2008:76-115.

[5] Harrop R,Machacek J.Spring专业开发指南[M].北京:电子工业出版社,2006:49-182.

上一篇:一种基于注册表实现软件防盗功能的算法 下一篇:谈学校计算机房的管理