基于JAVA动态代理实现AOP研究.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于JAVA动态代理实现AOP研究

基于JAVA动态代理实现AOP研究   摘要: 通过JAVA的动态代理技术,可以使应用程序的核心业务与非核心业务在逻辑方面的耦合度得到以一定程度的降低,促进AOP的实现。在对AOP以及JAVA动态代理技术简单介绍的基础上,详细阐述基于JAVA的动态代理事务处理的基本原理。   关键词: JAVA;动态代理;AOP   中图分类号:TP311.52文献标识码:A文章编号:1671-7597(2011)0620088-01   1 AOP概述   AOP(Aspect-oriented Programming),即面向方面编程,是为了有效弥补和完善面向对象编程思想所存在的横切关注点处理上的不足所提出的一种全新的软件开发思想,从本质上讲,AOP与GOF的目标是一致的,所追求的都是调用与被调用双方间的解耦,在一定意义上讲,前者是后者的延续。   所谓方面,指的是在AOP中运用横切技术对开封装对象进行剖解,封装处理对多个类产生影响的公共行为所得到的模块,并且该模块是可以被反复利用的。简单的说,封装那些与核心业务逻辑不存在关联却被调用的逻辑或责任。AOP技术的作用主要是有效控制系统代码出现重复的几率以及模块间的耦合度,从而促进程序操作性的提升以及维护性的增强。   通过JAVA的动态代理技术以及静态织入这两种技术都可以实现AOP,其中,JAVA的动态代理技术主要是将消息截取之后加以装饰,并代替原有对象行为;而静态织入式,则采用既定的语法创建“方面”,并将其代码织入。从实质上讲,这两种方式具有相同的技术特征。   2 JAVA动态代理   AOP实现,一般要尽可能的透明化。业务类是不管这些切面的。实现的方法,一般都是拦截器,或者类似AspectJ那样的代码生成工具。如果使用动态代理,会使代码显得不规整。所以很多人不用传统的方法,而是采用别的方法实现。除非实现某个规则约束。但是这样的话就不透明了。所以,生成代码的模式更好一些,但是我们在程序里面生成代码,需要一些更加好的代理手法,所以就有了动态代理。动态代理是在JDK1.2之后才予以支持的。在Java.lang.reflect数据包下存在着可以执行商业方法的Java动态代理,在对商业方法加以调用时,也会同时自动调用执行处理器。在Java动态代理技术主要涉及到的步骤主要是:   1)InvocationHandler接口的实现,Object:invoke是本步骤中唯一被定义的方法。在实际操作过程中,一般会用Obj参数代表代理类,method代表别代理的方法,方法参数数组则是由args表示;   2)Proxy,即为动态代理类,作用类似于上例中的ProxySubject,其中主要包含以下内容:Protected Proxy(InvocationHandler h):构造函数,估计用于给内部的h赋值。Static Class getProxyClass(ClassLo   Ader loader,Class interfaces):获得一个代理类,其中loader是类装载器,interfaces是真实类所拥有的全部接口的数组。Static Object newProxyInstance(ClassLoader loader,Class interfaces,Invocation   Handler h):返回代理类的一个实例,返回后的代理类可以当作被代理类使用(可使用被代理类的在Subject接口中声明过的方法)。   3 基于JAVA的动态代理事务处理   在通常情况下,诸如读取以及修改等应用程序中所进行的访问数据库的操作都会被封装到事务当中,但是,这种做法具有一个十分突出的不足,那就是很容易将事务处理逻辑于业务逻辑糅杂在一起,导致二者之间很难明确的加以区分。举例来说,如果一个数据库访问类需要对数据库进行访问时,诸如创建事务、加锁以及解锁等于核心业务之间不存在任何必然联系的代码将会被添加到数据操作的前后当中。这些与核心业务之间不存在必然联系的代码将会分散在不同的地方,这就好似AOP当中的方面一样,采取这样的设计方式,所造成的最突出的问题就是大量重复代码的出现,这样就会对重复利用模块产生了不利影响。   在一定意义上讲,Java动态代理的利用提供了一条全新的设计事务处理模型的思路和途径。举例来说,在应用程序当中存在着三个数据访问类,分别是Customer、Provider以及Employee,这三个数据访问类都需要对数据库进行访问,三个分别对应着属于自己的保存数据的具体方法,分别是saveCustomer()、saveProvider()以及saveEmployee()。代理类DAOProxy是根据Java动态代理所设计出来的,该代理类的实例主要是用于处理一切数据访

文档评论(0)

317960162 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档