JDK的动态代理,指的是在运行的过程中,给某一个对象提供一个代理对象,并由代理对象控制对原对象的访问。主要是能起到隔离的作用, java.lang.reflect.InvocationHandler是jdk动态代理的具体实现接口,其中的invoke方法提供具体的代理实现逻辑。
定义接口类:
public interface HelloWord {
public String sayHello1(String str);
public String sayHello2(String str,String str1);
}
定义两个实现类,实现类1:
class ZhHello implements HelloWord{
@Override
public String sayHello1(String str) {
return "zhf"+str;
}
@Override
public String sayHello2(String str,String str1) {
return "zhf"+str+str1;
}
}
实现类2:
class LiHello implements HelloWord{
@Override
public String sayHello1(String str) {
return "Li"+str;
}
@Override
public String sayHello2(String str,String str1) {
return "Li"+str+str1;
}
}
代理功能类:
class HelloWordHandler<T> implements InvocationHandler {
private T target;
public HelloWordHandler(T helloWord ){
target = helloWord;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object retVal = method.invoke(target, args);
return retVal;
}
}
测试类:
class Test{
public static void main(String[] args) {
InvocationHandler handlerZh = new HelloWordHandler(new ZhHello());
HelloWord proxy = (HelloWord) Proxy.newProxyInstance(Test.class.getClassLoader(),new Class[]{HelloWord.class},handlerZh);
System.out.println(proxy.sayHello1("12312312"));
System.out.println(proxy.sayHello2("aaa","bbb"));
InvocationHandler handlerLi = new HelloWordHandler(new LiHello());
proxy = (HelloWord) Proxy.newProxyInstance(Test.class.getClassLoader(),new Class[]{HelloWord.class},handlerLi);
System.out.println(proxy.sayHello1("12312312"));
System.out.println(proxy.sayHello2("aaa","bbb"));
}
}
运行结果: