1. 首先完成一个接口的创建(里面有真正的想要实现的方法):
public interface Subject {
public void request();//想要实现的方法
}
2. 写一个真实的主题类实现Subject接口(并实现其中的方法):
public class RealSubject implements Subject {
public void request() {//实现接口中的方法
System.out.println("真实的主题的实现的方法");
}
}
3. 写一个动态的代理类实现InvocationHandler接口:
//动态的代理类应该实现的是InvocationHandler接口(在java.lang.reflect包下)
public class Proxyhandle implements InvocationHandler {
Object obj = null;
//写一个绑定的方法,绑定不同的接口进行代理
public Object bind(Object obj){
this.obj = obj;
//该方法的返回值是一个对象
//Proxy有一个方法newProxyInstace();有三个参数:第一个:表示所代理的真实类类的实例的类的加载器
//第二个参数表示是:所要代理的真实类所实现的接口
//第三个是:代理类本身
return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
}
//InvocationHandler接口中的方法invoke()
//invoke()之中的method就是表示真实类中实现接口中的那个方法
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
//调用参数method中的invoke()方法,其中有两个参数
//第一个参数表示:代理的真实类
//第二个参数表示:传入的参数 对象数组
System.out.println("代理之前的任务~~~");
Object o = method.invoke(this.obj, args);
System.out.println("代理之后的任务~~");
return o;//返回一个所代理的接口的实现类
}
}
4. 测试动态代理的类:TestProxy
public class TestProxy {
public static void main(String args[]){
Proxyhandle ph = new Proxyhandle();//拿到代理类的对象
//绑定代理的真实的主题对象
Subject sub = (Subject) ph.bind(new RealSubject());//将真实主题与代理进行绑定
sub.request();//调用真实对象的request(是实现接口中的方法)
//这时候代理类中的invock()方法将会被自动调用完成代理过程
}
//代理不同的真实类的话就直接改变bind()方法中的参数,传入你想要代理的真实类就ok
//这样就实现了动态的代理了
}
这样四步就完成来了一个动态代理的实例,每一步在代码中都有解释!
分享到:
相关推荐
Java反射机制与动态代理
java反射与动态代理
java反射和动态代理,详细说明反射和动态代理的方法和使用!
详细讲解java的reflect包的,阐述反射机制及动态代理的细节问题。其中动态代理部分内容参考网上资料。读完此文,相信会对javaf反射机制有一个完整清楚的了解。尤其应该看看其他中代码举例部分。
几个Java反射和动态代理的小例子。可以学习如何通过Java的反射机制实例化对象、调用对象的方法、操作对象的私有成员变量、改变数组中的某项的值、改变数组大小等;可以学习Java的动态代理模式、学习Java工厂模式以及...
java反射机制与动态代理 java反射机制 java反射机制java反射机制java反射机制java反射机制
java反射机制和动态代理的原理,熟悉反射机制和动态代理
java 反射与动态代理 源代码,java文件。
主要讲述Java反射机制与设计模式之一:代理模式的原理与应用;同时详细讲述了Java对代理模式的支持以及Java中动态代理的原理,应用与实践。
JAVA的反射机制与动态代理
JAVA 反射机制与动态代理ppt,郎溪出品
Java动态代理和Java反射的Demo演示,通俗易懂。
JAVA反射机制与动态代理.part04
java动态代理 public class HireProxy implements InvocationHandler { //被代理的真实角色 private Object obj; public HireProxy(Object obj) { super(); this.obj = obj; } //第二个参数method,被...
简单易懂的例子,让你瞬间明白反射和代理的原理
Java反射机制与动态代理 浪曦 Java Reflection API 简介 及动态代理
Java类反射 动态代理 讲解的很细,很受用 分享给大家
博客地址:http://blog.csdn.net/tyzlmjj/article/details/51251727