package staticProxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
interface Subject {
void action();
}
// 被代理类
class RealSubject implements Subject {
@Override
public void action() {
System.out.println("被代理类开始执行");
}
}
class MyInvocationHandler implements InvocationHandler {
Object obj; // 实现了接口的被代理类的对象的声明
// 1.给被代理类的对象实例化 2.返回一个代理类的对象
public Object blind(Object object) {
this.obj = object;
return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
}
//当通过代理类的对象发起对呗重写的方法调用时,都会转换为对如下的invoke方法的调用
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object returnVal = method.invoke(obj, args);
return returnVal;
}
}
public class DynamicProxy {
public static void main(String[] args) {
//1.被代理类的对象
RealSubject real = new RealSubject();
//2.创建了一个实现了InvocationHndler接口的类的对象
MyInvocationHandler handler = new MyInvocationHandler();
//3.调用blind()方法,动态的返回一个同样实现了real所在类实现的接口Subject的代理类对象
Object obj = handler.blind(real);
Subject sub = (Subject) obj;//此时的sub就是代理类的对象
sub.action();
}
}
Java_动态代理
原创
©著作权归作者所有:来自51CTO博客作者Mr_LiuT的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:JAVA_静态代理
下一篇:JAVA_动态代理AOP切面编程
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Cglib动态代理
cglib动态代理
cglib动态代理 -
Spring开发:动态代理的艺术与实践
本文深入分析了JDK和CGLIB两种动态代理技术在Spring框架中的应用。
动态代理 java JDK spring -
Java动态代理、cglib动态代理
说动态,需要先清楚静态。所谓静态就是程序员提前实现好的类,
java 代理类 ide