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");









原创粉丝点击