反射的动态代理
2015-09-21 12:24
288 查看
创建一个接口
创建一个实现接口类
创建
综合实现
结果:
添加
删除
修改
查询
--------
权限校验
添加
日志记录
权限校验
删除
日志记录
权限校验
修改
日志记录
权限校验
查询
日志记录
--------
权限校验
登录
日志记录
权限校验
注册
日志记录
权限校验
开始
日志记录
权限校验
完成
日志记录
package com.reflect.demo; public interface UserDao { public abstract void add(); public abstract void del(); public abstract void update(); public abstract void find(); }
创建一个实现接口类
package com.reflect.demo; public class UserDaoImpl implements UserDao { @Override public void add() { System.out.println("添加"); } @Override public void del() { System.out.println("删除"); } @Override public void update() { System.out.println("修改"); } @Override public void find() { System.out.println("查询"); } }基本操作
package com.reflect.demo; public class UserDaoDemo { public static void main(String[] args) { /* * 基本操作1 */ UserDao ud = new UserDaoImpl(); ud.add(); ud.del(); ud.update(); ud.find(); System.out.println("--------"); /* * */ UserDao ud2 = new UserDaoImpl(); ud2.add(); ud2.del(); ud2.update(); ud2.find(); System.out.println("--------"); } }
创建
package com.reflect.demo; 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 { System.out.println("权限校验"); Object result = method.invoke(target, args); System.out.println("日志记录"); return result; //返回代理对象 } }
综合实现
package com.reflect.demo; import java.lang.reflect.Proxy; public class DynamicProxyTest { public static void main(String[] args) throws Exception{ /* * 基本操作1 */ UserDao ud = new UserDaoImpl(); ud.add(); ud.del(); ud.update(); ud.find(); System.out.println("--------"); /* * 动态代理对象 pulic static Object newProxyInstance(ClassLoader loader, * Class<?>[] interfaces,InvocationHandler h) */ //User MyInvocationHandler handler = new MyInvocationHandler(ud); UserDao proxy = (UserDao) Proxy.newProxyInstance(ud.getClass() .getClassLoader(), ud.getClass().getInterfaces(), handler); proxy.add(); proxy.del(); proxy.update(); proxy.find(); System.out.println("--------"); //Student /* * 动态代理 多个 */ StudentDao sd = new StudentDaoImpl(); sd.login(); sd.regist(); sd.start(); sd.finish(); System.out.println("--------"); MyInvocationHandler handler1 = new MyInvocationHandler(ud); StudentDao proxy1 = (StudentDao) Proxy.newProxyInstance(ud.getClass() .getClassLoader(), ud.getClass().getInterfaces(), handler1); proxy1.login(); proxy1.regist(); proxy1.start(); proxy1.finish(); } }
结果:
添加
删除
修改
查询
--------
权限校验
添加
日志记录
权限校验
删除
日志记录
权限校验
修改
日志记录
权限校验
查询
日志记录
--------
权限校验
登录
日志记录
权限校验
注册
日志记录
权限校验
开始
日志记录
权限校验
完成
日志记录
相关文章推荐
- 数独程序设计构思
- python第三方库系列之二十五--pip库
- 0916编译原理第二次上机作业
- github常见操作和常见错误!错误提示:fatal: remote origin already exists.
- java 引用、对象
- iOS9中https网络适配
- spring事物不回滚问题!
- unsupervised learning(association)
- Linux 文件系统底层实现
- Junit高级
- JavaScript之array
- C和C++通用的头文件编写形式
- 解决使用jquery上传图片并实现回显失败,提示ReferenceError: $ is not defined
- 64位IOS系统中敲壳提取32位程序
- java自学日记2
- Hadoop 笔记之实例化异常&&无法加载类异常
- 使用listview绘制表格,实现双击表头排序
- android 获取textView的行数为0,获取控件的宽高为0的解决办法
- 华丽的网上突出代码组件CodeMirror
- js之DOM操作(插入节点insertBefore())