Java动态代理

Java动态代理

ID:37239657

大小:389.55 KB

页数:11页

时间:2019-05-20

Java动态代理_第1页
Java动态代理_第2页
Java动态代理_第3页
Java动态代理_第4页
Java动态代理_第5页
资源描述:

《Java动态代理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、SpringAOP使用动态代理技术在运行期织入增强的代码,为了揭示SpringAOP底层的工作机理,有必要对涉及到的Java知识进行学习。SpringAOP使用了两种代理机制:一种是基于JDK的动态代理;另一种是基于CGLib的动态代理。之所以需要两种代理机制,很大程度上是因为JDK本身只提供接口的代理,而不支持类的代理。带有横切逻辑的实例我们通过具体化代码实现上一节所介绍例子的性能监视横切逻辑,并通过动态代理技术对此进行改造。在调用每一个目标类方法时启动方法的性能监视,在目标类方法调用完成时记录方法的花费时间。代码清单6-2ForumService:包含性能监视横切代码Java代码1

2、.packagecom.baobaotao.proxy;2.publicclassForumServiceImplimplementsForumService{3.publicvoidremoveTopic(inttopicId){4.5.//①-1开始对该方法进行性能监视6.PerformanceMonitor.begin(7."com.baobaotao.proxy.ForumServiceImpl.removeTopic");8.System.out.println("模拟删除Topic记录:"+topicId);9.try{10.Thread.currentThread().s

3、leep(20);11.}catch(Exceptione){12.thrownewRuntimeException(e);13.}14.15.//①-2结束对该方法进行性能监视16.PerformanceMonitor.end();17.}18.19.publicvoidremoveForum(intforumId){20.//②-1开始对该方法进行性能监视21.PerformanceMonitor.begin(22."com.baobaotao.proxy.ForumServiceImpl.removeForum");23.System.out.println("模拟删除Forum

4、记录:"+forumId);24.try{25.Thread.currentThread().sleep(40);26.}catch(Exceptione){27.thrownewRuntimeException(e);28.}29.30.//②-2结束对该方法进行性能监视31.PerformanceMonitor.end();32.}33.}代码清单6-2中粗体表示的代码就是具有横切逻辑特征的代码,每个Service类和每个业务方法体的前后都执行相同的代码逻辑:方法调用前启动PerformanceMonitor,方法调用后通知PerformanceMonitor结束性能监视并给记录性

5、能监视结果。PerformanceMonitor是性能监视的实现类,我们给出一个非常简单的实现版本,其代码如代码清单6-3所示:代码清单6-3PerformanceMonitorJava代码1.packagecom.baobaotao.proxy;2.publicclassPerformanceMonitor{3.//①通过一个ThreadLocal保存调用线程相关的性能监视信息4.privatestaticThreadLocalperformanceRecord=5.newThreadLocal();6.7./

6、/②启动对某一目标方法的性能监视8.publicstaticvoidbegin(Stringmethod){9.System.out.println("beginmonitor...");10.MethodPerformancemp=newMethodPerformance(method);11.performanceRecord.set(mp);12.}13.publicstaticvoidend(){14.System.out.println("endmonitor...");15.MethodPerformancemp=performanceRecord.get();16.17.

7、//③打印出方法性能监视的结果信息。18.mp.printPerformance();19.}20.}ThreadLocal是将非线程安全类改造为线程安全类的法宝,在9.2节中我们将详细介绍这个Java基础知识。PerformanceMonitor提供了两个方法:通过调用begin(Stringmethod)方法开始对某个目标类方法的监视,method为目标类方法的全限定名;而end()方法结束对目标类方法的监视,并给出性能监视的信息。这两个方

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。