public class ProxyInvocationHandler implements InvocationHandler {
//需要代理的接口
private Object target;
public void setTarget(Object target) {
this.target = target;
}
//生成代理类
//this.getClass().getClassLoader(): 本身的加载器
//target.getClass().getInterfaces(): 被代理的接口
//this: 本身ProxyInvocationHandler
public Object getProxy(){
return Proxy.newProxyInstance(this.getClass().getClassLoader(),
target.getClass().getInterfaces(),this);
}
// proxy : 代理类
// method : 代理类的调用处理程序的方法对象.
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
log(method.getName());
Object result = method.invoke(target, args);
return result;
}
public void log(String methodName){
System.out.println("执行了"+methodName+"方法");
}
}
2、代理接口
public interface Dog {
void shut();
void eat();
}
3、代理接口实现类
public class DogImpl implements Dog{
@Override
public void shut() {
System.out.println("狗叫方法......");
}
@Override
public void eat() {
System.out.println("狗吃方法......");
}
}
4、测试类
public class Test {
public static void main(String[] args) {
//真实对象,必须要有
DogImpl dog = new DogImpl();
//代理对象的调用处理程序
ProxyInvocationHandler pih = new ProxyInvocationHandler();
pih.setTarget(dog); //设置要代理的对象
Dog proxy = (Dog) pih.getProxy();//动态生成代理类!
proxy.shut();
}
}