首页 / JAVA / java动态代理Proxy
java动态代理Proxy
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java动态代理Proxy,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3554字,纯文字阅读大概需要6分钟。
内容图文
![java动态代理Proxy](/upload/InfoBanner/zyjiaocheng/1281/02362f2b2bab498e96fd805d65b8a92e.jpg)
![技术分享](/upload/getfiles/default/2022/11/10/20221110050744158.jpg)
![技术分享](/upload/getfiles/default/2022/11/10/20221110050744179.jpg)
package com.gz_06; public interface StudentDao { public void login(); public void regist(); } package com.gz_06; public class StudentDaoImpl implements StudentDao{ @Override publicvoid login() { System.out.println("登陆"); } @Override publicvoid regist() { System.out.println("注册"); } } package com.gz_06; publicclass StudentDaoImpl2 implements StudentDao{ @Override publicvoid login() { System.out.println("权限验证"); System.out.println("登陆"); System.out.println("动态代理"); } @Override publicvoid regist() { System.out.println("权限验证"); System.out.println("注册"); System.out.println("动态代理"); } } package com.gz_06; publicinterface UserDao { publicvoid add(); publicvoid delete(); publicvoid change(); publicvoid find(); } package com.gz_06; publicclass UserDaoImpl implements UserDao{ @Override publicvoid add() { System.out.println("增加操作"); } @Override publicvoid delete() { System.out.println("删除操作"); } @Override publicvoid change() { System.out.println("修改操作"); } @Override publicvoid find() { System.out.println("查询操作"); } } package com.gz_06; publicclass UserDaoImpl2 implements UserDao{ @Override publicvoid add() { System.out.println("权限校验"); System.out.println("增加操作"); System.out.println("日志记录"); } @Override publicvoid delete() { System.out.println("权限校验"); System.out.println("删除操作"); System.out.println("日志记录"); } @Override publicvoid change() { System.out.println("权限校验"); System.out.println("修改操作"); System.out.println("日志记录"); } @Override publicvoid find() { System.out.println("权限校验"); System.out.println("查询操作"); System.out.println("日志记录"); } } package com.gz_06; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; publicclass Test { publicstaticvoid main(String[] args) { UserDao ud=new UserDaoImpl(); ud.add(); ud.delete(); ud.change(); ud.find(); System.out.println("----------"); //但是在实际开发中,一般在进行操作的时候都需要进行权限验证,操作后需要进行日志记录,怎么办呢? //因为是一部分人需要权限校验,和日志记录,所以第一种方式是重写一个实现类 UserDao ud2=new UserDaoImpl2(); ud2.add(); ud2.delete(); ud2.change(); ud2.find(); System.out.println("--------"); //其他的类也需要权限校验,又这样做? StudentDao stu=new StudentDaoImpl(); stu.login(); stu.regist(); System.out.println("-----"); StudentDao stu2=new StudentDaoImpl2(); stu2.login(); stu2.regist(); System.out.println("------"); //这样做太恶心了,所以我们要学会偷懒,就需要使用动态代理 /* static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) 返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。 InvocationHandler 是代理实例的调用处理程序 实现的接口。 Object invoke(Object proxy, Method method, Object[] args) 在代理实例上处理方法调用并返回结果。 */ InvocationHandler handler=new MyInvocationHandler(ud); UserDao proxy=(UserDao) Proxy.newProxyInstance(ud.getClass().getClassLoader(), ud.getClass().getInterfaces(), handler); proxy.add(); proxy.delete(); proxy.change(); proxy.find(); System.out.println("------"); InvocationHandler handler2=new MyInvocationHandler(stu); StudentDao proxy2= (StudentDao) Proxy.newProxyInstance(stu.getClass().getClassLoader(), stu.getClass().getInterfaces(), handler2); proxy2.login(); proxy2.regist(); } } package com.gz_06; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; publicclass 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; } }
原文:http://www.cnblogs.com/aigeileshei/p/5608418.html
内容总结
以上是互联网集市为您收集整理的java动态代理Proxy全部内容,希望文章能够帮你解决java动态代理Proxy所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。