18.1新建一个Demo2的接口;
package com.eduask.entity4;
//定义Demo2的接口;
public interface Demo2 {
void id();
void name();
void pwd();
}
18.2新建一个Demo2Impl类实现Demo2的接口;
package com.eduask.entity4;
//定义一个Demo2Impl的实现Demo2接口;
public class Demo2Impl implements Demo2 {
@Override
public void id() {
System.out.println("Demo2 id");
}
@Override
public void name() {
System.out.println("Demo2 name");
}
@Override
public void pwd() {
System.out.println("Demo2 pwd");
}
}
18.3 新建一个代理LogDynamicProxy类;
package com.eduask.entity4;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class LogDynamicProxy implements InvocationHandler {
private Object targer;//定义一个代理对象;
//设置代理方法,并设置对象值;
public static Object getDynamicProxy(Object obj){
LogDynamicProxy proxy=new LogDynamicProxy();
proxy.targer=obj;
//返回新生成实例化; 参数1 对象加载 参数2 对象接口 参数3 对象;
return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(), proxy);
}
//重写invoke方法;
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
//输出获得方法的名字;
System.out.println("你执行了"+method.getName()+"的方法");
//获得方法的执行;
Object obj=method.invoke(targer, args);
return obj;
}
}
18.4 新建一个TestDemo2
package com.eduask.entity4;
//使用动态代理测试;
public class TestDemo2 {
public static void main(String[] args) {
Demo2 d2=new Demo2Impl();
Demo2 proxy=(Demo2) LogDynamicProxy.getDynamicProxy(d2);
proxy.id();
proxy.name();
proxy.pwd();
}
}
18.5 程序运行如下:
你执行了id的方法
Demo2 id
你执行了name的方法
Demo2 name
你执行了pwd的方法
Demo2 pwd