电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > DOCX文档下载
分享到微信 分享到微博 分享到QQ空间

java-用Java动态代理实现AOP

  • 资源ID:474757346       资源大小:15.20KB        全文页数:6页
  • 资源格式: DOCX        下载积分:15金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要15金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

java-用Java动态代理实现AOP

用Java动态代理实现AOP目前整个开发社区对AOP(Aspect Orie nted Programi ng)推崇备至,也涌现出大量支持AOP的优秀Framework,-Spring, JAC, Jboss AOP等等。AOP似乎一时之间成了潮流。Java初学者不禁要发出感慨,OOP还没有学通呢,又来AOP本文不是要在理论上具体阐述何为AOP,为何要进行AOP .要详细了解学习AOP可以到它老家http:/aosd.net去瞧瞧。这里只是意图通过一个简单的例子向初学者展示一下如何来进行AOP.为了简单起见,例子没有没有使用任何第三方的AOP Framework,而是利用Java语言本身自带的动态代理功能来实现AOP.让我们先回到AOP本身,AOP主要应用于日志记录,性能统计,安全控制,事务处理等方面。它的主要意图就要将日志记录,性能统计,安全控制等等代码从商业逻辑代码中清楚的划分出来,我们可以把这些行为一个一个单独看作系统所要解决的问题,就是所谓的面向问题的编程(不知将AOP译作面向问题的编程是否欠妥)。通过对这些行为的分离,我们希望可以将它们独立地配置到商业方法中,而要改变这些行为也不需要影响到商业方法代码。假设系统由一系列的Bus in essObject所完成业务逻辑功能,系统要求在每一次业务逻辑处理时要做日志记录。这里我们略去具体的业务逻辑代码。public in terface Busin ess In terface public void processBus in ess();public class Busin essObject impleme nts Busin ess In terface private Logger logger = Logger.getLogger(this.getClass().getName();public void processBus in ess()try logger.i nfo("start to process in g.");/bus in ess logic here.System.out.pri ntl n( "here is bus in ess logic ” );logger.i nfo("e nd process in g."); catch (Excepti on e)logger.i nfo("excepti on happe nds.");/excepti on han dli ng这里处理商业逻辑的代码和日志记录代码混合在一起,这给日后的维护带来一定的困 难,并且也会造成大量的代码重复。完全相同的log代码将出现在系统的每一个Busin essObject中。 我们必须知道商业逻辑代码何时被调用,这样我们好插入日志记录代码。一般来说要截获一按照AOP的思想,我们应该把日志记录代码分离出来。要将这些代码分离就涉及到一个问题,个方法,我们可以采用回调方法或者动态代理。动态代理一般要更加灵活一些,目前多数的AOP Framework也大都采用了动态代理来实现。这里我们也采用动态代理作为例子。JDK1.2以后提供了动态代理的支持,程序员通过实现java.la ng.reflect.l nvocati on Ha ndler接口提供 一个执行处理器,然后通过java.la ng.reflect.Proxy得到一个代理对象,通过这个代理对象来执行商业方法,在商业方法被调用的同时,执行处理器会被自动调用。有了 JDK的这种支持,我们所要做的仅仅是提供一个日志处理器。public class LogHa ndler impleme nts In vocati onHan dler private Logger logger = Logger.getLogger(this.getClass().getName();private Object delegate;public LogHa ndler(Object delegate) this.delegate = delegate;public Object invoke(Object proxy, Method method, Object args) throws Throwable Object o = n ull;try logger.i nfo("method stats." + method); o = method.i nvoke(delegate,args);logger.i nfo("method en ds." + method); catch (Excepti on e)logger.i nfo("Excepti on happe nds.");/excetpi on han dli ng. return o;现在我们可以把Busi nessObject里面的所有日志处理代码全部去掉了。public class Busin essObject impleme nts Busin ess In terface private Logger logger = Logger.getLogger(this.getClass().getName();public void processBus in ess()/bus in ess process ingSystem.out.pri ntl n( “ here is bus in ess logic ” );客户端调用商业方法的代码如下:Busin ess In terface bus in esslmp = new Busin essObject();In vocati onHan dler han dler = new LogHa ndler(bus in esslmp);Busin ess In terface proxy = (Bus in ess In terface) Proxy .n ewProxy In sta nce( bus in esslmp.getClass().getClassLoader(), bus in esslmp.getClass().getl nterfaces(), han dler);proxy.processBus in ess();程序输出如下:INFO: method stats. here is bus in ess logic INFO: method en ds.至此我们的第一次小尝试算是完成了。可以看到,采用AOF之后,日志记录和业务逻辑代码完全分开了,以后要改变日志记录的话只需要修改日志记录处理器就行了,而业务对象本身(Bus in essObject )无需做任何修改。并且这个日志记录不会造成重复代码了,所有的商业处理对象都 可以重用这个日志处理器。当然在实际应用中,这个例子就显得太粗糙了。由于JDK的动态代理并没有直接支持一次注册多个InvocationHandler,那么我们对业务处理方法既要日志记录又要性能统计时,就需要自己做一些变通了。一般我们可以自己定义一个 Handler接口,然后维护一个队列存放所有Handler,当 InvocationHandler被触发的时候我们依次调用自己的Handler。所幸的是目前几乎所有的AOF Framework都对这方面提供了很好的支持.这里推荐大家使用Spring。目前整个开发社区对AOP(Aspect Orie nted Frogrami ng)推崇备至,也涌现出大量支持AOF的优秀Framework,-Spring, JAC, Jboss AOF等等。AOP似乎一时之间成了潮流。Java初学者不禁要发出感慨,OOF还没有学通呢,又来AOF本文不是要在理论上具体阐述何为AOF,为何要进行AOF .要详细了解学习AOF可以到它老家http:/aosd.net去瞧瞧。这里只是意图通过一个简单的例子向初学者展示一下如何来进行AOF.为了简单起见,例子没有没有使用任何第三方的本身自 AOF Framework,而是利用Java语言 带的动态代理功能来实现AOF.让我们先回到AOF本身,AOF主要应用于日志记录,性能统计,安全控制,事务处理等方面。它的主要意图就要将日志记录,性能统计,安全控制等等代码从商业逻辑代码中清楚的划分出来,我们可以把这些行为一个一个单独看作系统所要解决的问题,就是所谓的面向问题的编程(不知将AOP译作面向问题的编程是否欠妥)。通过对这些行为的分离,我们希望 可以将它们 独立地配置到商业方法中,而要改变这些行为也不需要影响到商业方法代码。假设系统由一系列的Bus in essObject所完成业务逻辑功能,系统要求在每一次业务逻辑处理时要做日志记录。这里我们略去具体的业务逻辑代码。public in terface Busin ess In terface public void processBus in ess();public class Busin essObject impleme nts Busin ess In terface private Logger logger = Logger.getLogger(this.getClass().getName();public void processBus in ess()try logger.i nfo("start to process in g.");/bus in ess logic here.System.out.pri ntl n("here is bus in ess logic ” );logger.i nfo("e nd process in g."); catch (Excepti on e)logger.i nfo("excepti on happe nds.");/excepti on han dli ng这里处理商业逻辑的代码和日志记录代码混合在一起,这给日后的维护带来一定的困难,并且也 会造成大量的代码重复。完全相同的log代码将出现在系统的每一个Busin essObject中。按照AOP的思想,我们应该把日志记录代码分离出来。要将这些代码分离就涉及到一个问题,我们必须知道商业逻辑代码何时被调用,这样我们好插入日志记录代码。一般来说要截获一个方法,我们可以采用回调方法或者动态代理。动态代理一般要更加灵活一些,目前多数的AOP Framework也大都采用了动态代理来实现。这里我们也采用动态代理作为例子。JDK1.2以后提供了动态代理的支持,程序员通过实现java.la ng.reflect.l nvocati on Ha ndler接口提供 一个执行处理器,然后通过 java.la ng.reflect.Proxy得到一个代理对象,通过这个代理对象来执行商业方法,在商业方法被调用的同时,执行处理器会被自动调用。有了 JDK的这种支持,我们所要做的仅仅是提供一个日志处理器。public class LogHa ndler impleme nts In vocati onHan dler private Logger logger

注意事项

本文(java-用Java动态代理实现AOP)为本站会员(hs****ma)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.