基于Spring的面向方面编程

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:zhangjm
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:面向方面编程(AOP)是面向对象编程(OOP)的一种扩展技术,能够很好的解决横切关注点问题,使得大型软件的设计和实现都能保持功能分离,解除代码耦合。采用AOP技术设计的软件,功能划分清晰,代码保持独立,系统维护简单。Spring AOP是AOP技术的一种实现技术。
  关键词:Spring;AOP;Java;框架
  中图分类号:TP312文献标识码:A文章编号:1009-3044(2007)03-10753-01
  
  1 引言
  
  AOP(Aspected Oriented Programming)是一种新兴的编程技术,它可以解决OOP和过程化方法不能很好解决的横切(cross-cutting)关注点问题,如:事务、安全、日志等。AOP既可以用于分析设计阶段,也可以用于编码实现阶段,真正实现功能模块的分离,避免代码缠绕。Spring是基于J2EE的轻量级开源开发框架,其中Spring AOP是整个Spring框架的核心组件。
  
  2 Spring AOP 介绍
  
  OOP将应用程序分解成各个层次的对象,而AOP将横切程序的各种关注点分离出来,简化了大型软件的设计 。方面(Aspect)是用Spring的 Advisor或拦截器实现的。Spring IoC容器(BeanFactory 和ApplicationContext)并不强制依赖于AOP,如果不需要,可以不用AOP。但使用AOP,可以提供更强的模块性、可扩展性。
  Spring AOP是由纯Java开发的,它实现了AOP联盟的接口。不同于AspectJ的实现,Spring AOP 只实现了方法级别的连接点,已经足够满足J2EE应用。OOP倡导的是基于setter/getter 的方法访问,而非直接访问域。为了使控制反转(IoC)很方便的使用企业级服务,则需要Spring AOP 的实现。Spring AOP 在运行时才创建Advice 对象。
  
  3 Spring AOP 面向方面编程
  
  3.1 创建Advice
  AOP 通知包含了方面的逻辑。创建一个Advice 对象,就是在编写实现横切的功能。连接点是用方法拦截器实现的,这意味着你编写的通知将在方法调用的不同点织入程序中。由于在调用一个方法时有几个不同的时间点,Spring 可以在不同的时间点将方面织入程序。Spring AOP提供了四种Advice接口:MethodBeforeAdvice 用于在目标方法调用前触发;AfterReturningAdvice 用于在目标方法调用后触发;ThrowsAdvice 用于在目标方法抛出异常时触发;MethodInterceptor 用于在目标方法执行时触发。如果要实现相应功能,则需要实现上述对应的接口。例如:实现Before Advice,需要实现方法 void before(Method method, Object[] args, Object target)。
  3.2 在 Spring 中定义 Pointcut
  切入点可以决定特定的类、特定的方法是否匹配特定的标准。如果匹配成功,则通知将应用到此方法上。Spring 切入点用很灵活的方式将通知组织进类中。Spring 中的切入点框架的核心是Pointcut接口,此接口允许定义织入通知中的类和方法。许多方面是通过一系列的通知和切入点组合来定义的。
  在Spring中,一個advisor就是一个方面的完整的模块化表示。Spring提供了PointcutAdvisor接口,把通知和切入点组合成一个对象,可以方便的在一个地方管理切入点和通知。切入点分为两类:静态和动态。静态切入点的性能要优于动态切入点,所以应优先考虑使用。对Spring内建的静态切入点类:StaticMethodMatherPointcut,只需要关心setMappedName和setMappedNames方法。可以使用具体的类名,也可以使用通配符。如:设置mappedName属性为set* ,则匹配所有以set为前缀的方法。Spring还提供了静态类:RegexpMethodPointcut,通过使用正则表达式来定义你感兴趣的方法。
  当切入点需要运行时参数来执行通知时,需要使用动态切入点。Spring内建的动态切入点类是ControlFlowPointcut,此切入点匹配基于当前线程的调用堆栈,在当前线程执行时找到特定的类和特定的方法时才返回true。大多数的切入点可以静态确定,使用动态切入点有很大的性能损耗。为了增加切入点的可重用性,Spring 提供了切入点上的集合操作——交集和合并。
  3.3 用ProxyFactoryBean创建AOP代理
  如果定义一个名字为myfactory的ProxyFactoryBean,引用myfactory的对象所看到的不是ProxyFactoryBean实例本身,而是由实现ProxyFactoryBean的类的 getObject()方法所创建的对象。这个方法将创建一个包装了目标对象 的AOP代理(Spring倡导基于接口编程)。使用ProxyFactoryBean或者其他IoC可知的类来创建AOP代理的最重要的优点之一,是IoC可以管理通知和切入点。这是一个非常的强大的功能,能够实现其他AOP框架很难实现的特定的方法。例如,一个通知本身可以引用应用对象(除了目标对象, 它在任何AOP框架中都可以引用应用对象),这完全得益于依赖注入所提供的可插入性。通常,不需要ProxyFactoryBean的全部功能,因为我们常常只对一个方面感兴趣: 例如,事务管理。仅当对一个特定的方面感兴趣时,可以工厂来创建AOP代理,如:TransactionProxyFactoryBean。
  3.4 自动代理
  只有很少类需要被通知时,ProxyFactoryBean 可以很好的工作。当有许多类需要通知时,显式地创建每个代理就显得很繁琐,Spring提供了自动通过容器来创建代理的功能。Spring提供了两个类实现自动代理:BeanNameAutoProxyCreator和DefaultAdvisorAutoProxyCreator。
  BeanNameAutoProxyCreator为匹配名字的Bean产生代理,它可以使用在将一个或者多个方面应用在命名相似的Bean中。自动代理框架判定代理将要暴露什么接口,如果目标Bean没有实现任何接口,就会动态产生一个子类。而更强大的自动代理是:DefaultAdvisorAutoProxyCreator,你所需要做的是在BeanFactory中包含它的配置。Bean定义被加载到Spring容器中后,DefaultAdvisorAutoProxyCreator将搜索上下文中的Advisor,最后它将Advisor应用到匹配Advisor切入点的Bean中。这个代理只对Advisor起作用,它需要通过Advisor来得到需要通知的Bean。
  元数据自动代理(MetaData AutoProxy)的配置,依赖于源代码属性而不是外部XML配置文件。这可以非常方便的使源代码和AOP元数据组织在同一个地方。元数据自动代理最常用的地方是用来声明事务。Spring提供了通过AOP框架来声明事务,这与EJB使用声明式事务的功能是相同的。
  
  4 结束语
  
  AOP使得大型、复杂软件的分析设计和实现变得简单,保持功能和代码分离。AOP不会取代OOP,而是OOP的扩展。AOP技术并不复杂,经过短时间的学习就可以掌握。AOP技术已经引入C、C++、Java、C#等许多语言中。Spring 因为引入AOP,比EJB简单、可靠、高效,不依赖于容器,更容易集成、测试和移植。
  参考文献:
  [1] Rod Johnson. Professional Java Development with the Spring Framework [M],Wiley Publishing,2005.
  [2] Craig Walls. Spring in action[M], Manning Publications,2005.
  本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
其他文献
摘要:介绍上位机与下位机的串行通信的实现。下位机利用ARM技术,上位机用VC来编写串行通信程序。详细介绍了ARM自带的UART的工作原理及与计算机串行口的连接方法。利用WIN32 API函数在VC下实现了串行通信程序.并给出了部分代码实例。  关键词:ARM;串行通信   中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)03-10705-01    1 引言    目前
期刊
摘要:无线ATM网络作为宽带多媒体通信的一种解决方案,近年来得到了广泛的研究。基于高速率、高可靠性的光纤信道的ATM网络扩展到无线环境面临着许多问题。本文介绍了无线ATM网络体系结构、协议栈、应用特点和关键技术,并重点讨论了无线ATM网络的MAC层协议。  关键词:无线ATM;媒体访问控制;时分多址   中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)03-10691-
期刊
摘要:J2ME(面向资源受限设备)与J2EE(面向企业用户)技术的结合为移动电子商务提供了很好的解决方案。讨论了如何利用J2ME,Servlet和MIDlet等进行移动终端应用程序开发,并结合传统网站,实现了基于J2ME的移动商务模型。通过实验验证了建立移动商务网站的可行性。  关键词:J2ME;J2EE;移动电子商务;MIDlet;Servlet  中图分类号:TP311文献标识码:A文章编号:
期刊
摘要:通过对我国高职院校学生成绩卡的信息分析,根据数据库结构化理论,提出了基于成绩卡的数据表的设计方案。并阐明了基于ASP的高校学生成绩卡打印输出的模块化设计思想。  关键词:成绩卡;ASP;模块;方案  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)03-10742-02    1 ASP简介     ASP即Microsoft Active Server Page
期刊
摘要:本文首先应用最小二乘误差补偿算法来校正磁强计的航向角,这样可以提高系统的定姿精度;然后再利用校正后的姿态角信息来应用到GPS快速定姿中,将校正后的姿态角信息应用到多分辨率算法中,能够大大提高系统的快速性和姿态角的精度。  关键词:电子磁强计;GPS;姿态确定  中图分类号:P228 文献标志码:A 文章编号:1009-3044(2007)03-10740-02    1 引言    电子磁强
期刊
摘要:CDP协议是一种基于UDP协议之上的TCP协议实现,该协议同时具有TCP协议的通用、高效,和UDP协议的高NAT穿透成功率,可用于很多P2P网络应用的构建。  关键词:P2P;CDP;NAT 穿透;基于UDP的TCP  中图分类号:TP317文献标识码:A 文章编号:1009-3044(2007)03-10736-02    1 引言    随着互联网应用广泛推广,基于各种P2P网络技术的产
期刊
摘要:对校园网中存在安全隐患的网络边界实施“端点准入”认证机制的方法进行了研究,详细分析了基于802.1x的认证机制的工作原理及其体系结构,提供了在linux上实现此种认证机制的方法。  关键词:802.1x;端点准入;Linux;RADIUS  中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)03-10684-03    1 引言    “端点准入”是指对接入网络的用
期刊
摘要:能让网站上的天气预报自动更新,不仅可减轻网站维护的工作量,还可使用户享受到准确、及时的天气服务。该文论述了如何通过开放的、支持多种协议的Windows下的网络编程接口WinSock,用VB编制一套程序,定时自动从中央气象台网站上下载气象信息,用于自己的网站。使访客能及时得到所需的天气信息。  关键词:WinSock;网站;VB  中图分类号:TP311文献标识码:A 文章编号:1009-30
期刊
摘要:本文详细介绍为通过拨号上网的用户分配私有IP地址,再通过路由器NAT技术进行转换,结合AAA技术对拨号上网用户进行身份认证的综合解决方案,在互联网中具有广泛应用空间。  关键词:拨号;NAT;AAA;路由器  中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)03-10718-02    1 引言    随着互联网技术的高速发展,互联网用户的数量急剧增加,加快了信息
期刊
摘要:自从八十年代末期简单网络管理协议面世以来,网络管理技术在短短的十几年里得到了突飞猛进的发展,网络管理技术正逐步成为网络构建和维护中必不可少的重要因素。本文主要介绍了Socket通讯原理及其通讯方式[3],并对SNMP协议通信原理进行了论述,最后实现了一种基于Java的SNMP协议的接收和发送报文的Socket通讯。  关键词:SNMP;Socket;同步;异步  中图分类号:TP393.03
期刊