Java代理
来源:互联网 发布:小程序源码 百度网盘 编辑:程序博客网 时间:2024/06/11 14:00
·代理
接口类 Human.java
package com.ywl5320.demo.proxy;public interface Human {public void sayHello(String msg);}
1):静态代理(通用性不强)
package com.ywl5320.demo.proxy;public class HumanImpl implements Human {@Overridepublic void sayHello(String msg) {// TODO Auto-generated method stubSystem.out.println("hello " + msg);}}
HumanProxy humanProxy = new HumanProxy();humanProxy.sayHello("world");
2):JDK动态代理(实现了接口)
package com.ywl5320.demo.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class DynamicProxy implements InvocationHandler{private static Object object;public static DynamicProxy instance = new DynamicProxy();private DynamicProxy(){}public static DynamicProxy getInstance(){return instance;}@SuppressWarnings("unchecked")public <T> T getProxy(Object o){object = o;return (T) Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), this);}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {// TODO Auto-generated method stubObject o = method.invoke(object, args);return o;}}
Human humanDynamicProxy = DynamicProxy.getInstance().getProxy(new HumanImpl());humanDynamicProxy.sayHello("world");3):CGLIB动态代理(有/没有接口都行)
cglib.jar
asm.jar
package com.ywl5320.demo.proxy;import java.lang.reflect.Method;import net.sf.cglib.proxy.Enhancer;import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;public class CglibDynamicProxy implements MethodInterceptor{private static CglibDynamicProxy instance = new CglibDynamicProxy();private CglibDynamicProxy() {// TODO Auto-generated constructor stub}public static CglibDynamicProxy getInstance(){return instance;}@SuppressWarnings("unchecked") public <T> T getProxy(Class<T> cls){ return (T) Enhancer.create(cls, this); }@Overridepublic Object intercept(Object obj, Method method, Object[] arg, MethodProxy proxy) throws Throwable {// TODO Auto-generated method stubObject o = proxy.invokeSuper(obj, arg);return o;}}
Human helloProxy = CglibDynamicProxy.getInstance().getProxy(HumanImpl.class); helloProxy.sayHello("world");
阅读全文
1 0
- Java 代理,动态代理
- java代理静态代理
- Java代理
- java代理
- java代理
- java 代理
- java代理
- JAVA 代理
- Java----代理
- java代理
- java代理
- java代理
- java代理
- java 代理
- java 代理
- java代理
- java代理
- Java----代理
- Oracle 如何将一个字段拆分成表
- Android studio 自动导入(全部)包 import
- 【C#】解决MouseHook捕获鼠标动作,在有些电脑上SetWindowsHookEx失败返回0的问题
- 嵌入式linux软件工程师的总结和规划
- THINKPHP_模版系统变量$Think
- Java代理
- php-phantomjs中文文档用法示例集合
- linux安装AvtiveMQ5.15.0
- vi命令行模式搜索
- C++内存管理资料全收集(转)
- 常考linux指令之sed
- 关于Synthesis用异步朗读没有声音的
- linux信号捕获相关
- 点击edittext系统弹出软键盘,保证标题不动,输入框在输入法上面