定义接口:
package com.heima.动态代理;
public interface User {
public void add();
public void delete();
}
实现接口类:
package com.heima.动态代理;
public class UserImp implements User {
@Override
public void add() {
// TODO Auto-generated method stub
// System.out.println("权限校验");
System.out.println("添加功能");
// System.out.println("日志记录");
}
@Override
public void delete() {
// TODO Auto-generated method stub
// System.out.println("权限校验");
System.out.println("删除功能");
// System.out.println("日志记录");
}
}
实现代理-在代理实例上处理方法调用并返回结果:
package com.heima.动态代理;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class MyInvocationHandler implements InvocationHandler {
private Object target;
public MyInvocationHandler(Object target) {
this.target=target;
}
@Override
public Object invoke(Object Proxy, Method method, Object[] args) throws Throwable {
// TODO Auto-generated method stub
System.out.println("权限校验");
method.invoke(target, args); //执行被代理target对象的方法
System.out.println("日志记录");
return null;
}
}
测试类:
package com.heima.动态代理;
import java.lang.reflect.Proxy;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
UserImp ui=new UserImp();
ui.add();
ui.delete();
System.out.println("=========================================");
MyInvocationHandler m=new MyInvocationHandler(ui);
User u=(User)Proxy.newProxyInstance(ui.getClass().getClassLoader(), ui.getClass().getInterfaces(), m);
u.add();
u.delete();
}
}
测试结果: