首页 > 其他 > 详细

一句话说清楚动态代理

时间:2019-11-26 18:59:05      阅读:99      评论:0      收藏:0      [点我收藏+]
一句话 说清楚动态代理  动态的在内存中给被代理对象 创建一个代理类。被代理类不同,创建的代理类不同。所以是动态的

代码实例如下:

工厂类:
public class ProxyFactory {

//维护一个 被代理类 对象 用 Object 就可以了因为不知道 被代理类是那样的。 通过 构造器 初始化 属性
private Object target;
// 利用构造器对 代理对象 进行初始化
public ProxyFactory(Object target) {
this.target = target;
}


//给目标对象生成一个代理对象

/**三个参数的说明:
* classLoder 代理类使用的类加载器和 被代理类使用的是一样的 加载器
* interfaces[] 和被代理类实现了共同的接口
* handler 调用处理器 实现了 InvocationHandler 这个接口的匿名实现类。重写方法
* 这个方法里面利用反射 调用 被代理类的方法。
*
*
*/
public Object getProxyInstance(){
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("JDK代理开始了");
Object val = method.invoke(target,args);
return val;
}
});
}


接口:
    public interface ITeachDao {
void teach();
}



被代理对象:
public class Teacher implements ITeachDao {
public void teach() {
System.out.println("老师正在授课");
}
}

测试 客户端:

//一句话 说清楚动态代理  动态的在内存中给被代理对象 创建一个代理类。被代理对象不同创建的 代理类不同。
public class Client {
public static void main(String[] args) {
//创建 被代理类
Teacher target = new Teacher();
//给被代理类 创建 代理对象
ProxyFactory factory = new ProxyFactory(target);
ITeachDao proxyInstance =(ITeachDao) factory.getProxyInstance();
System.out.println("proxyInstance=" + proxyInstance.getClass());
//代理对象 调用 方法。
proxyInstance.teach();
}
}






一句话说清楚动态代理

原文:https://www.cnblogs.com/gaohq/p/11937182.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!