jdk动态代理实现
来源:互联网 发布:网络中级工程师好考吗 编辑:程序博客网 时间:2024/05/17 03:07
1.接口定义
package com.henry.service;public interface HelloService {void sayHello(); int sum(int i ,int j); }
2.接口实现
package com.henry.service.impl;import com.henry.service.HelloService;public class HelloServiceImpl implements HelloService {public void sayHello() {System.out.println("hello henry");} public int sum(int i, int j) { // TODO Auto-generated method stub return i+j; } }
3.代理类
package com.henry.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class MyProxy implements InvocationHandler {private Object originalObj;public Object bind(Object originalObj){this.originalObj=originalObj;return Proxy.newProxyInstance(this.originalObj.getClass().getClassLoader(), this.originalObj.getClass().getInterfaces(), this);}public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("proxy class exec"); return method.invoke(this.originalObj, args);}}
4.测试
package com.henry.proxy;import com.henry.service.HelloService;import com.henry.service.impl.HelloServiceImpl;public class TestProxy {public static void main(String[] args) {HelloService service = (HelloService) new MyProxy().bind(new HelloServiceImpl());service.sayHello();}}
5.结果
proxy class exechello henry
6.本地生成代理类文件
package com.henry.proxy;import com.henry.service.HelloService;import com.henry.service.impl.HelloServiceImpl;public class TestProxy {public static void main(String[] args) { //生成代理类$Proxy0.class System.setProperty("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");HelloService service = (HelloService) new MyProxy().bind(new HelloServiceImpl());service.sayHello();}}
7.反编译$Proxy0.class
import com.henry.service.HelloService;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.lang.reflect.UndeclaredThrowableException;public final class $Proxy0 extends Proxy implements HelloService{ private static Method m3; private static Method m1; private static Method m0; private static Method m4; private static Method m2; public $Proxy0(InvocationHandler paramInvocationHandler) throws { super(paramInvocationHandler); } public final void sayHello() throws { try { this.h.invoke(this, m3, null); return; } catch (Error|RuntimeException localError) { throw localError; } catch (Throwable localThrowable) { throw new UndeclaredThrowableException(localThrowable); } } public final boolean equals(Object paramObject) throws { try { return ((Boolean)this.h.invoke(this, m1, new Object[] { paramObject })).booleanValue(); } catch (Error|RuntimeException localError) { throw localError; } catch (Throwable localThrowable) { throw new UndeclaredThrowableException(localThrowable); } } public final int hashCode() throws { try { return ((Integer)this.h.invoke(this, m0, null)).intValue(); } catch (Error|RuntimeException localError) { throw localError; } catch (Throwable localThrowable) { throw new UndeclaredThrowableException(localThrowable); } } public final int sum(int paramInt1, int paramInt2) throws { try { return ((Integer)this.h.invoke(this, m4, new Object[] { Integer.valueOf(paramInt1), Integer.valueOf(paramInt2) })).intValue(); } catch (Error|RuntimeException localError) { throw localError; } catch (Throwable localThrowable) { throw new UndeclaredThrowableException(localThrowable); } } public final String toString() throws { try { return (String)this.h.invoke(this, m2, null); } catch (Error|RuntimeException localError) { throw localError; } catch (Throwable localThrowable) { throw new UndeclaredThrowableException(localThrowable); } } static { try { m3 = Class.forName("com.henry.service.HelloService").getMethod("sayHello", new Class[0]); m1 = Class.forName("java.lang.Object").getMethod("equals", new Class[] { Class.forName("java.lang.Object") }); m0 = Class.forName("java.lang.Object").getMethod("hashCode", new Class[0]); m4 = Class.forName("com.henry.service.HelloService").getMethod("sum", new Class[] { Integer.TYPE, Integer.TYPE }); m2 = Class.forName("java.lang.Object").getMethod("toString", new Class[0]); return; } catch (NoSuchMethodException localNoSuchMethodException) { throw new NoSuchMethodError(localNoSuchMethodException.getMessage()); } catch (ClassNotFoundException localClassNotFoundException) { throw new NoClassDefFoundError(localClassNotFoundException.getMessage()); } }}
0 0
- JDK动态代理实现
- jdk动态代理实现
- 实现jdk动态代理
- jdk动态代理实现
- jdk实现动态代理
- JDK实现动态代理
- JDK动态代理实现
- JDK 动态代理 & AOP实现动态代理
- JDK动态代理实现AOP
- JDK动态代理实现原理
- JDK动态代理实现原理
- jdk动态代理的实现
- 仿JDK动态代理实现
- JDK动态代理实现原理
- JDK动态代理实现原理
- jdk动态代理实现原理
- JDK动态代理实现原理
- JDK动态代理实现原理
- Uart-WiFi模块ESP8266把玩记
- win7下文件共享
- PHP多种序列化/反序列化的方法
- 算法导论第四章-最大子数组问题
- 王立平--trim(),replace(),replaceAll()
- jdk动态代理实现
- Linux kernel路由机制分析
- 下拉刷新进页面自动刷新
- Navicat For Mysql快捷键
- Same Tree
- 【iOS开发-62】自定义cell制作团购页面、顶部图片轮播、底部模拟加载更多功能,核心是练习代理模式
- ios推送兼容ios7,8
- centos ssh无密码登录本机
- ObjectARX学习笔记(二十七)---如何拷贝将一个AcDbDatabase拷贝到另一张dwg里面