2024年4月27日发(作者:)
维普资讯
第26卷第6期
V01.26 No.6
企业技术开发
1ECHNOLOGICAL DEVELOPMENT OF ENTERPRISE
2007年6月
Jun.2007
AOP在Spring中的应用研究
李玲琳,唐金鹏
(湖南省交通职业技术学院信息管理系,湖南长沙410004)
摘要:面向方面编程(AOP)能够很好地通过解决横切关注点问题以及相关的设计难题来实现松散耦合。Spring
AOP是AOP技术的一种实现,文章介绍了AOP概念,然后详细讨论了如何利用Spring AOP开发AOP程序。
关键词:AOP;Spring AOP;方面;松耦合
中图分类号:TP31 1.52 文献标识码:A 文章编号:1006—8937(2007)06—0021—03
Research on application of AOP in Spring
LI Ling-lin,TANG Jin—peng
(Department of Information Management,Hunan Co唧unication Polytechnic,Changsha,Hunan 410004, China)
Abstract:Aspeet Oriented Programming can resolve crosscutting concern and the correlative design problem
to carry out the loose coupling effectively.The Spring AOP is a kind of realization of AOP.This paper
introduced the concept of AOP,then detailedly discussed how to utilize Spring AOP to develop AOP
program・
Keywords:AOP;Spring AOP;aspect;loose coupling
面向方面编程(AOP,Aspect Oriented Program—
③通知(Adviee):指在特定的连接点,AOP框
ming)解决了面向对象编程(OOP,Object Oriented
Programming)和过程化方法不能够很好解决的横切
架中需要执行的动作。通知有“around”、“before”和
“
throws”等3种类型。
④切人点(Pointeut):指定一个通知将被引发的
系列连接点集合。AOP框架必须允许开发者指定
⑤引人(Introduetion):指添加方法或字段到被
(erosscut)问题,如:事务、安全、日志等横切关注
点。当未来系统变得越来越复杂,横切关注点就成为
个急待解决的问题,而AOP可以很轻松地解决这
个问题。Spring是基于J2EE的轻量级开源开发框
一
一
切人点,如使用正则表达式。
通知的类。Spring允许引人新的接口到任何被通知 架,其中Spring AOP组件实现了面向方面编程。
1 AOP概述
的对象。例如,可以使用一个引人使任何对象实现
IsModiifed接口来简化缓存。
AOP提供从另一个角度来考虑程序结构以完
⑥目标对象(Target Object):指包含连接点的
善面向对象编程。面向对象将应用程序分解成各个 对象,也被称作被通知或被代理对象。
层次的对象,而AOP将程序分解成各个方面或者
⑦A0P代理(AOP Proxv):指由AOP框架创建
说关注点,并对这些横切多个对象的关注点进行模
的对象。在Spring中,AOP代理可以是JDK动态代
块化。对AOP的基本概念解释如下:
理或者CGLIB代理。
①方 ̄(Aspect):指一个关注点的模块化,这个 ⑧织人(Weaving):组装方面来创建一个被通
关注点在实现时可能需要横切多个对象。事务管理 知对象。可以在编译时完成,也可以在运行时完成。
在J2EE中的应用是一个很好的横切关注点例子。
Spring和其它纯Java AOP框架一样,在运行时完
方面在Spring中用Advisor或拦截器实现。
成织人。
②连接点(Joinpoint):指程序执行过程中明确
的点,如方法的调用或特定的异常的抛出。
收稿日期:2007—0l一25
2 Spring AOP的应用
Spring的一个关键组件就是AOP框架。Spring
IoC容器Bean Factory和Application Context)并不
依赖于AOP,这意味着在Spring中可以不用AOP,
作者简介:李玲琳(1974一),女,湖南长沙人,硕士研究生,讲师,
主要研究方向:软件工程,工作流建模,计算机应用技
术。
但AOP完善了Spring IoC,使之成为一个有效的中
维普资讯
22 企业技术开发 2007年6月
间件解决方案。
Spring AOP是Spring框架的重要组成部分,它
实现了AOP联盟约定的接口。Spring AOP是由纯
Java开发完成的,它实现了方法级别的连接点,而在
很方便地在一个地方管理切人点和通知。Spring中
的切人点分为两类:静态和动态。因为静态切人点
的性能要优于动态切入点,所以优先考虑使用静态
切人点。Spring为我们提供创建静态切人点很实用
的类StaticMethodMatherPointeut,在这个类中,我们
只需要关心setMappedName和setMappedNams方
J2EE应用中,AOP拦截到方法级的操作已经足够
了。由于OOP倡导的是基于setter/getter的方法访
问,而非直接访问域,所以Spring仅仅提供方法级
法,可以使用具体的类名,也可以使用通配符。如:
的连接点。为了使控制反转(IoC)很方便地使用健
壮、灵活的企业服务,需要Spring AOP来实现,因
为它在运行时才创建Advice对象。下面讨论使用
Spring AOP松散耦合的几种方式。
2.1创建通知
为实现AOP,开发者需要开发AOP通知(Ad—
vice)。AOP通知包含了方面(Aspect)的业务逻辑。当
创建一个Advice对象的时候,就编写了实现横切
(cross-cutting)功能的代码。Spring的连接点是用方
法拦截器实现的,这就意味着编写的Spring AOP
通知将在方法调用的不同点织人程序中。由于在调
用一个方法时有几个不同的时间点,Spring可以在
不同的时问点织入程序。Spring AOP中,提供了4
种通知的接口:MethodBeforeAdvice用于在目标方
法调用前触发;AfterReturningAdvice用于在目标方
法调用后触发;ThrowsAdvice用于在目标方法抛出
异常时触发;MethodInterceptor用于实现Around
通知(Advice),在目标方法执行的前后触发。
如果要实现相应的功能,则需要实现上述接口。
例如:实现Before通知(Advice)需要实现方法void
before(Method method,Object[]args,Object target),
实现After通知(Advice)需要实现方法void afterRe—
turning(Method method,Object【]args,Object tar—
get)。
2.2在Spring中定义切入点
在不能明确调用方法的时候,通知就很不实用。
切入点则可以决定特定的类、特定的方法是否匹配
特定的标准。如果匹配,则通知将应用到此方法上。
Spring切入点允许用很灵活的方式将通知组织进
我们的类中。Spring中的切人点框架的核心是
Pointcut接口,此接口允许我们定义织人通知中的类
和方法。许多方面就是通过一系列的通知和切人点
组合来定义的。
在Spring中,一个advisor就是一个方面的完整
的模块化表示。sDring提供了PointcutAdvisor接口
把通知和切人点组合成一个对象。Spring中很多内
建的切人点都有对应的PointcutAdvisor,因此可以
设 ̄mappedName属性为set*,则匹配所有的set方
法。Spring还提供了通过正则表达式来创建静态切
入点的实用类RegexpMethodPointcut。通过使用Perl
样式的正则表达式来定义感兴趣的方法。当切人点
需要用运行时参数值来执行通知时,则使用动态切
入点。Spring提供了一个内建的动态切人点:Con—
trolF1owPointcut,此切入点匹配基于当前线程的调
用堆栈。只有在当前线程运行时找到特定的类和特
定的方法才返回true。使用动态切人点有很大的性
能损耗。大多数的切人点可以静态确定,我们很少
有机会创建动态切人点。为了增加切入点的可重用
性,Sprlng提供了切人点上的集合操作——交集和
并集。
2.3 用Pr0xyFact0ryBean创建AoP代理
ProxyFactoryBean和其他Spring的FactoryBean
实现一样,引入一个间接的层次。如果定义一个名
字为myfactory的ProxyFactoryBean,引用myfaetory
的对象所看到的不是ProxyFactoryBean实例本身,
而是由实现ProxyFaetoryBean的类的getObject f1方
法所创建的对象。这个方法将创建一个包装了目标
对象的AOP代理。使用PmxvFactoryBean或者其他
IoC可知的类来创建AOP代理的最重要的一个优
点是IoC可以管理通知和切人点,这是一个非常强
大的功能,能够实现其他AOP框架很难实现的特定
的方法。例如,一个通知本身可以引用应用对象(除
了目标对象,它在任何AOP框架中都可以引用应用
对象),这完全得益于依赖注入所提供的可插入性。
通常,我们不需要ProxyFactoryBean的全部功能,因
为我们常常只对一个方面感兴趣:例如,事务管理。
当我们仅仅对一个特定的方面感兴趣时,我们可以
使用许多便利的工厂来创建AOP代理,如:Transac—
tionProxyFaetoryBean。
2.4自动代理
在应用规模比较小,只有很少类需要被通知时,
ProxyFactoryBean可以很好地工作。当有许多类需
要被通知时,创建每个代理就显得很繁琐。幸运的
是Spring提供了使用自动通过容器来创建代理的
维普资讯
第26卷第6期 李玲琳,等:AOP在Spring中的应用研究
功能。这时,只需要配置一个Bean来做繁琐的工
作。Spring提供了两个类实现自动代理:BeanName—
AutoProxyCreator和DefaultAdvisorAutoProxyCreator。
AOP是面向对象编程的有力补充,通过方面可
以聚合应用中的行为,从而形成可重用的模块。通过
程序可以实现在何处及如何来调用这些行为。这可
以减少代码重复,并使操作者更加关注业务逻辑。
Spring提供了AOP框架来实现调用方法时加入方
面。在AOP框架中可以很方便地使用预定义的静
BeanNameAutoProxyCreator为匹配名字的Bean产
生代理,它可将一个或者多个方面应用在命名相似
的Bean中。自动代理框架将自动产生代理要暴露出
的接口。如果目标Bean没有实现任何接口,就会动
态切人点来定义被调用的类和方法。我们需要通过
态产生厂一个子类。而更强大的自动代理是DefauIt— Spring提供的代理类来产生代理对象,可以使用
AdvisOrAutoProxyCreator,只需要在BeanFactory中包
含它的配置就可完成代理。这个类的奇妙之处在于
ProxyFactoryBean也可以使用自动代理。Spring
AOP的编程方式模块化了横向关注点的实现,提供
了一个更好更快的软件开发方式。在软件结构日益
ing AOP将会发挥越来
义被加载到Spring容器中后,DefaultAdvisorAuto—
扩大、日益复杂的今天,Spr
ProxyCreator将搜索上下文中的Advisor,最后它将
越重要的作用。
Advisor应用到匹配Advisor切人点的Bean中。这
个代理只对Advisor起作用,它需要通过Advisor来
参考文献:
得到需要通知的Bean。元数据自动代理(MetaData
AutoProxv)配置依赖于源代码属性而不是外部
XML配置文件。这可以非常方便地将源代码和
AOP元数据组织在同一个地方。元数据自动代理最
常用的地方是用来声明事务,Spring提供了很强的
AOP框架来声明事务。
【1】凌晨,陈芳莉.面向方面程序设计技术『J】.计算机系统应
用,2006,(2):34.
它使用实现了BeanPostProcessor接口。当Bean定
『2】徐宝文.面向方面的程序设计:概念、实现与未来『J】.计算
机与数字工程,2005,f81.
『3】付登科,郝克刚,葛玮.AOP改进观察者模式——实现关
注点的分离『J】.计算机应用,2005,25(12).
3结论
,¨ 。 。 ’ ’
}加强 资源共享, 促进《企业技
俭业技术开发》第四届理事会年会已于2006年
10月26日在湖南省长沙市胜利召开。 企业技术开
理事会成立四年来,理事会在湖南省科技厅、湖南
省科技信息研究所的领导和支持下,逐步建立起适应
市场经济条件的运行机制,理事会工作取得可喜成
绩。通过对理事单位的宣传、加强与理事单位的沟通、
促进与理事单位的互动、加强对理事单位的研发服
务、为理事单位提供政策咨询服务等方式,理事会的
服务功能得到提高。同时杂志社以理事会为平台,促
进了产学研三方的有机结合,为企业、科研院所、高校
提供了学习、交流的园地。
对于理事会下一步的发展,俭业技术开发》杂志
社社长、理事会副理事长肖雪葵指出要增强品牌意
识,加强自身建设。通过完善网络资源建设,进一步加
强与政府、科研院所、高校与企业间的联系,进一步加
大为理事会单位研究开发提供服务的力度,加大对理
事单位的宣传力度,继续办好 企业技术开发》杂志,
・ - -
发布者:admin,转转请注明出处:http://www.yc00.com/news/1714157387a2392681.html
评论列表(0条)