dyn_proxy--AOP动态代理实现方式2.ppt
《dyn_proxy--AOP动态代理实现方式2.ppt》由会员分享,可在线阅读,更多相关《dyn_proxy--AOP动态代理实现方式2.ppt(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Winter LJava动态接口代理技术问题提出问题提出视窗操作系统中的钩子(Hook)方法通过编写动态链接库并注册成为系统钩子用于拦截某些Window API或者某个系统消息在Java中如何拦截某个方法的执行.如果可以拦截,那么拦截了又有什么用?方法拦截的目的方法拦截的目的屏蔽某个函数的执行屏蔽某个函数的执行动态改写函数的代码动态改写函数的代码通过在某个函数执行前和执行后增加代码来增强原有函数的功能跟踪函数被调用的情况跟踪函数被调用的情况疑问疑问我我为什么要拦截呢?为什么要拦截呢?我直接改写要拦截的那个函我直接改写要拦截的那个函数不就可以了嘛?数不就可以了嘛?错!因为并不是每个方法你都可以修
2、改的,例如其他厂商开发的包,例如数据库的JDBC驱动程序包,是不是每个厂商的代码你都要插一腿呢?局限性局限性只能拦截接口的方法!也就是说要拦截的函数必须是在某个接口中定义的方法。允许:Connection.close()ServletRequest.getParameter(String param)不允许:String.length()现在可以开始了现在可以开始了需要准备几个需要准备几个Java源文件如下源文件如下:1.Test.java测试接口类2.TestImpl.java测试接口实现类3.TestProxy.java接口代理类4.Tester.java测试类,main方法所在类Test
3、.java源码源码package demo;public interface Test public void sayHello(String name);TestImpl.java源码源码package demo;public class TestImpl implements Test public void sayHello(String name)System.out.println(Hello+name);TestProxy.java源码源码(注意红色斜体注意红色斜体)package demo;import java.lang.reflect.*;public class TestP
4、roxy implements InvocationHandler Test iTest=null;public TestProxy(Test test)this.iTest=test;public Test getTest()return(Test)Proxy.newProxyInstance(iTest.getClass().getClassLoader(),iTest.getClass().getInterfaces(),this);public Object invoke(Object proxy,Method method,Object args)throws Throwable S
5、ystem.out.println(Before invoke sayHello(+args0+);Object rst=method.invoke(iTest,args);System.out.println(After invoke sayHello(+args0+);return rst;Tester.java源码源码package demo;public class Tester public static void main(String args)getTest1().sayHello(JAVA接口代理);System.out.println(=);getTest2().sayHe
6、llo(JAVA接口代理);private static Test getTest1()return new TestImpl();private static Test getTest2()return new TestProxy(new TestImpl().getTest();执行结果!执行结果!Hello JAVA接口代理接口代理=Before invoke sayHello(JAVA接口代理接口代理)Hello JAVA接口代理接口代理After invoke sayHello(JAVA接口代理接口代理)其中红色红色为函数接管后(TestProxy)加入的打印信息!怎么回事?怎么回事
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- dyn_proxy AOP 动态 代理 实现 方式
限制150内