当前位置:首页 > CN2资讯 > 正文内容

java动态代理Proxyjava动态代理

1天前CN2资讯
package com.gz_06; public interface StudentDao { public void login(); public void regist(); } package com.gz_06; public class StudentDaoImpl implements StudentDao{ @Override public void login() { System.out.println("登陆"); } @Override public void regist() { System.out.println("注册"); } } package com.gz_06; public class StudentDaoImpl2 implements StudentDao{ @Override public void login() { System.out.println("权限验证"); System.out.println("登陆"); System.out.println("动态代理"); } @Override public void regist() { System.out.println("权限验证"); System.out.println("注册"); System.out.println("动态代理"); } } package com.gz_06; public interface UserDao { public void add(); public void delete(); public void change(); public void find(); } package com.gz_06; public class UserDaoImpl implements UserDao{ @Override public void add() { System.out.println("增加操作"); } @Override public void delete() { System.out.println("删除操作"); } @Override public void change() { System.out.println("修改操作"); } @Override public void find() { System.out.println("查询操作"); } } package com.gz_06; public class UserDaoImpl2 implements UserDao{ @Override public void add() { System.out.println("权限校验"); System.out.println("增加操作"); System.out.println("日志记录"); } @Override public void delete() { System.out.println("权限校验"); System.out.println("删除操作"); System.out.println("日志记录"); } @Override public void change() { System.out.println("权限校验"); System.out.println("修改操作"); System.out.println("日志记录"); } @Override public void find() { System.out.println("权限校验"); System.out.println("查询操作"); System.out.println("日志记录"); } } package com.gz_06; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; public class Test { public static void 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; 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; } } View Code
    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/24928.html

    分享给朋友:

    “java动态代理Proxyjava动态代理” 的相关文章

    不限制流量套餐:选择适合你的最佳电信方案

    在我们这个信息高速发展的时代,手机成为了我们日常生活中不可或缺的一部分。而随着视频、游戏和社交媒体等应用的流行,很多用户的流量需求逐渐增加。这也促使电信运营商们纷纷推出了“不限流量套餐”,以满足用户对流量的广泛需求。 简单来说,不限流量套餐意指用户可以在一个月内不限流量使用手机数据,虽然很多套餐背后...

    探索美国ISP VPS:提升网络性能与安全性的最佳选择

    在当今互联网时代,虚拟专用服务器(VPS)变得越来越受欢迎,尤其是当我们提到美国ISP VPS时。这种由美国互联网服务提供商提供的VPS,不仅性能强大,还具有许多独特的优势。简而言之,美国ISP VPS就是在美国数据中心托管的一种虚拟服务器,它能满足各类业务需求,如解锁流媒体服务、支持跨境电商等。...

    VPSCheap评测:低价VPS服务的最佳选择与性能分析

    VPSCheap的概述 我第一次听说VPSCheap的时候,是在一个热闹的VPS论坛上。这个成立于2010年的主机商,主要提供KVM型VPS服务,其特点是低价格和无限流量。从那以后,我对VPSCheap的关注逐渐加深。它的数据中心位于美国达拉斯,给不少用户带来了良好的使用体验。论坛上的用户在讨论各自...

    Virmach虚拟主机评测:高性价比VPS服务推荐

    大家好,今天我想和你聊一聊Virmach,这是一家我非常推荐的虚拟主机提供商。Virmach专注于提供VPS(虚拟专用服务器)服务,近年来逐渐在行业中赢得了一席之地。它的价格相对亲民,而服务质量与稳定性也让人感到满意。很多人选择它,主要是因为它不仅适合个人用户,也非常受中小企业欢迎。 Virmach...

    购买DNS解锁服务器的最佳选择与配置指南

    在当今的信息时代,获取我们想要的内容常常并不像想象中那样简单。很多流媒体服务在不同地区的可用性有所限制,这使得我们在享受内容时常常受到阻碍。这时候,DNS解锁服务器就成为了解决这个问题的有效工具。DNS解锁技术通过修改服务器上的DNS设置,可以帮助用户突破地理限制,顺利访问各种国际流媒体服务。 我刚...

    Zenlayer如何优化企业全球网络连接与数字化转型

    在当今数字化时代,企业对全球网络连接的需求呈现出爆炸式增长。Zenlayer作为一家基于SDN的全球网络及服务提供商,恰如其分地填补了这一市场空白。总部位于洛杉矶的Zenlayer,不仅连接着企业和用户与云端,还通过其高度灵活的裸机云、云连接以及边缘计算服务,帮助企业迅速部署和管理全球IT资源。我认...