JDK动态代理(Proxy)的两种实现方式
JDK自带的Proxy动态代理" title="动态代理">动态代理两种实现方式
前提条件:JDK Proxy必须实现对象接口
so,创建一个接口文件,一个实现接口对象,一个动态代理文件
接口文件:TargetInterface.java
packageproxy;publicinterface TargetInterface {public String method1();publicvoid method2();publicint method3(int x);}
实现接口对象的Class文件:Target.java
package proxy;publicclass Target implements TargetInterface{@Override
public String method1() {// TODO Auto-generated method stubSystem.out.println("method1 running...");
return "aaa";
}
@Override
publicvoid method2() {
// TODO Auto-generated method stub
System.out.println("method2 running...");
}
@Override
publicint method3(int x) {
// TODO Auto-generated method stub
return x;
}
}
动态代理的两种实现方式
1.ProxyTest.java
package proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import org.junit.Test;publicclass ProxyTest {@Test
publicvoid test1() {TargetInterface newProxyInstance
= (TargetInterface) Proxy.newProxyInstance(Target.
class.getClassLoader(), new Class[] {TargetInterface.class},new InvocationHandler() {//invoke 代表的是执行代理对象的方法@Override
//method:代表目标对象的方法字节码对象
//args:代表目标对象的响应的方法的参数
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// TODO Auto-generated method stub
Object invoke = method.invoke(new Target(), args);
return invoke;
}
});
String method1 = newProxyInstance.method1();
newProxyInstance.method2();
int method3 = newProxyInstance.method3(100);
System.out.println(method1);
System.out.println(method3);
}
}
2.ProxyTest2.java
package proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import org.junit.Test;publicclass ProxyTest2 {publicstaticvoid main(String[] args) {Target target
= new Target();TargetInterface newProxyInstance
= (TargetInterface) Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new InvocationHandler() {@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//反射知识点Object invoke = method.invoke(target, args);
return invoke;
}
});
String method1 = newProxyInstance.method1();
newProxyInstance.method2();
int method3 = newProxyInstance.method3(100);
System.out.println(method1);
System.out.println(method3);
}
}
运行结果都如下所示:
总结下重要的就是:
1.熟练Proxy.newProxyInstance的使用
2.JDK的Proxy一定要实现接口。
以上是 JDK动态代理(Proxy)的两种实现方式 的全部内容, 来源链接: utcz.com/z/514598.html