首先,先创建一个interface
IHello 目标接口类
interface IHello { void sayHello(); }
然后再写一个目标类的实现类
class HelloImpl implements IHello { @Override public void sayHello() { System.out.println("Hello JAVA!"); } }
最后再手动编写一个代理类
//需要实现InvocationHandler接口完成代理
class HelloProxy implements InvocationHandler { //目标接口 目的拿到目标接口的所有信息 private IHello hello; public HelloProxy(IHello hello) { this.hello = hello; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //利用反射执行该方法 参数1 目标类,参数2 目标类的参数 return method.invoke(hello, args); } }
然后写一个客户端,对该代理进行操作:
@org.junit.Test public void test() { //目标类的类加载器 目标类实现的接口 代理类 IHello hello = new HelloImpl();
//调用jdk代理方法 实现对classLoader的操作,完成代理,最后使用代理对该方法进行代理操作 IHello tho = (IHello)Proxy.newProxyInstance(hello.getClass().getClassLoader(), hello.getClass().getInterfaces(), (proxy, method, args) -> { return method.invoke(hello, args); }); tho.sayHello(); }