第一种使用jdk实现
第二种使用cglib实现
代码写的比较飘逸,娱乐与教学并存。
[color=blue][size=large]jdk实现动态代理(接口)[/size][/color]
[color=blue][size=large]cglib实现动态代理[/size][/color]
第二种使用cglib实现
代码写的比较飘逸,娱乐与教学并存。
[color=blue][size=large]jdk实现动态代理(接口)[/size][/color]
public interface 打架接口 {
public void 开打();
}
public class 打架 implements 打架接口 {
@Override
public void 开打() {
System.out.println("威哥 打出绝技 降龙十八掌。。。");
}
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class 打架小帮手 implements InvocationHandler{
private Object delegate;
public Object binder(Object delegate) {
this.delegate = delegate;
return Proxy.newProxyInstance(delegate.getClass().getClassLoader(), delegate.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("小弟们 冲啊。。。");
Object invoke = method.invoke(delegate, args);
System.out.println("哥在江湖又留下了一段传说。。。");
return invoke;
}
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class 威哥 {
public static void main(String[] args) {
打架接口 打架接口 = (打架接口) new 打架小帮手().binder(new 打架());
打架接口.开打();
}
// 我要去打架
// 1 叫上小弟
// 2 打架
// 3 哥又留下一段传说
}
[color=blue][size=large]cglib实现动态代理[/size][/color]
public class 打架 {
public void 开打() {
System.out.println("威哥 打出绝技 降龙十八掌。。。");
}
}
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 打架小帮手 implements MethodInterceptor {
@Override
public Object intercept(Object object, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
System.out.println("小弟们 冲啊。。。");
Object result = methodProxy.invokeSuper(object,args);
System.out.println("哥在江湖又留下了一段传说。。。");
return result;
}
public Object createProxy(Class targetClass){
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(targetClass);
enhancer.setCallback(new 打架小帮手());
return enhancer.create();
}
}
public class 威哥 {
public static void main(String rags[]){
打架 打架 = new 打架();
打架小帮手 帮手 = new 打架小帮手();
打架 打架代理 = (打架) 帮手.createProxy(打架.getClass());
打架代理.开打();
}
}