java内置接口动态代理
2018-10-17 16:39 人月神话。 阅读(526) 评论(0) 收藏 举报
package 动态代理; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; /** * 实现InvocationHandler * @author lzq * @version 1.0 * @tags * @date 2018年10月17日 */ 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 { System.out.println("权限校验"); method.invoke(target, args);//通过反射调用方法 System.out.println("日志记录"); return null; } }
package 动态代理; public interface User { public void add(); public void delete(); }
package 动态代理; public class UserImpl implements User { @Override public void add() { System.out.println("添加成功"); } @Override public void delete() { System.out.println("删除成功"); } }
测试类:
package 动态代理; import java.lang.reflect.Proxy; public class Test { public static void main(String[] args) { UserImpl userimp = new UserImpl(); MyInvocationHandler my = new MyInvocationHandler(userimp);//自定义的代理类 //使用Proxy.newProxyInstance 方法创建代理 //获取到了类加载器 User u = (User) Proxy.newProxyInstance(userimp.getClass().getClassLoader(), //获取到 该实现类实现的所有接口 userimp.getClass().getInterfaces(),my); u.add(); u.delete(); } }
浙公网安备 33010602011771号