设计模式之动态代理的代码实现(Java)
来源:互联网 发布:摩托罗拉v3ie软件 编辑:程序博客网 时间:2024/05/12 13:46
//首先创建用户的接口与实现方法来进行模拟动态代理的操作//UserDaopackage july.star.proxy; /** * 用户数据处理接口 * @author MoXingJian * @email 939697374@qq.com * @date 2016年12月11日 下午3:30:19 * @version 1.0 */public interface UserDao { //用户的添删改查 public abstract void add(); public abstract void delete(); public abstract void update(); public abstract void select(); }//接口实现类package july.star.proxy; /** * UserDaoImpl * @author MoXingJian * @email 939697374@qq.com * @date 2016年12月11日 下午3:31:49 * @version 1.0 */public class UserDaoImpl implements UserDao { @Override public void add() { System.out.println("添加用户"); } @Override public void delete() { System.out.println("删除用户"); } @Override public void update() { System.out.println("修改用户"); } @Override public void select() { System.out.println("查询用户"); }}//InvocationHandler 是代理实例的调用处理程序 实现的接口。package july.star.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;/** * MyInvocationHandler * InvocationHandler 是代理实例的调用处理程序 实现的接口。 * 每个代理实例都具有一个关联的调用处理程序。 * 对代理实例调用方法时,将对方法调用进行编码并将其指派到它的调用处理程序的 invoke 方法。 * @author MoXingJian * @email 939697374@qq.com * @date 2016年12月11日 下午3:35:41 * @version 1.0 */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 object = method.invoke(target, args); System.out.println("日志记录"); return object; //返回动态代理对象 }}//测试package july.star.proxy;import java.lang.reflect.Proxy;/** * 动态代理测试 * * @author MoXingJian * @email 939697374@qq.com * @date 2016年12月11日 下午3:32:53 * @version 1.0 */public class ProxyDemo { public static void main(String[] args) { UserDao ud = new UserDaoImpl(); //代理前 ud.add(); ud.delete(); ud.update(); ud.select(); //分割线 System.out.println("----------------"); /** * newProxyInstance(ClassLoader loader, Class<?>[] interfaces, * InvocationHandler h) 返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。 */ MyInvocationHandler mih = new MyInvocationHandler(ud); // 通过反射获取类加载器和类的所有接口 // 因为传进去的是UserDao,所以返回动态代理对象也是UserDao UserDao proxy = (UserDao) Proxy.newProxyInstance(ud.getClass().getClassLoader(), ud.getClass().getInterfaces(), mih); //都给每个方法的前后做了权限校验与日志记录 proxy.add(); proxy.delete(); proxy.update(); proxy.select(); }}
0 0
- 设计模式之动态代理的代码实现(Java)
- java设计模式之动态代理模式!
- 大话设计模式4 代理模式 的java代码实现
- 代理模式之动态代理(java实现)
- Java设计模式(四)之动态代理模式
- java设计模式之代理模式 (静态&动态)
- 设计模式之动态代理 jdk实现
- java设计模式之代理模式,java动态代理
- java设计模式之代理模式,java动态代理
- 设计模式-java实现动态代理
- java设计模式之动态代理
- Java设计模式Proxy之动态代理
- java设计模式之动态代理
- Java设计模式Proxy之动态代理
- Java设计模式Proxy之动态代理
- Java设计模式Proxy之动态代理
- Java设计模式之动态代理
- java设计模式之---动态代理
- mysql远程连接
- 对JAVA中集合的总结
- HDU - 1270 小希的数表
- 【pku1743】Musical Theme
- 第八届ACM趣味程序设计竞赛第三场(正式赛)官方题解
- 设计模式之动态代理的代码实现(Java)
- css reset(重置样式)
- 文件读写二 -按照行读写
- Linux 之 cut
- map
- 什么是真和假
- Android h5 交互
- jQuery实现列表搜索(筛选)效果
- PAT(basic level) 1053住房空置率(20)