Java反射机制中动态代理的示例分析
发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,这篇文章主要介绍了Java反射机制中动态代理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 代理模式代理模式就是为其他对
千家信息网最后更新 2025年11月12日Java反射机制中动态代理的示例分析
这篇文章主要介绍了Java反射机制中动态代理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
1. 代理模式
代理模式就是为其他对象提供一种代理来控制对这个对象的访问。其实代理模式是在访问的对象时引入一定程度的间接性,这种间接性可以附加多种用途。
它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。
2. 分类
代理类按照创建时期可以分为两种,静态代理类和动态代理类。
静态代理类:由程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。
动态代理类:在程序运行时,运用反射机制动态创建而成。
3. 静态代理和动态代理举例
静态代理:
业务接口类:
package com.bjpowernode.pattern; public interface UserManager { public void addUser(String userId, String userName); public void delUser(String userId); public void modifyUser(String userId, String userName); public String findUser(String userId); }业务接口实现类:
package com.bjpowernode.pattern; public class UserManagerImpl implements UserManager { public void addUser(String userId, String userName) { //System.out.println("start-->>addUser() userId-->>" + userId); try { System.out.println("UserManagerImpl.addUser() userId-->>" + userId); //System.out.println("success-->>addUser()"); }catch(Exception e) { e.printStackTrace(); //System.out.println("error-->>addUser()"); throw new RuntimeException(); } } public void delUser(String userId) { System.out.println("UserManagerImpl.delUser() userId-->>" + userId); } public String findUser(String userId) { System.out.println("UserManagerImpl.findUser() userId-->>" + userId); return "张三"; } public void modifyUser(String userId, String userName) { System.out.println("UserManagerImpl.modifyUser() userId-->>" + userId); } }业务代理类:
package com.bjpowernode.pattern; public class UserManagerImplProxy implements UserManager { private UserManager userManager; public UserManagerImplProxy(UserManager userManager) { this.userManager = userManager; } public void addUser(String userId, String userName) { try { System.out.println("start-->>addUser() userId-->>" + userId); userManager.addUser(userId, userName); System.out.println("success-->>addUser()"); }catch(Exception e) { e.printStackTrace(); System.out.println("error-->>addUser()"); } } public void delUser(String userId) { } public String findUser(String userId) { return null; } public void modifyUser(String userId, String userName) { } }客户端类:
package com.bjpowernode.pattern; public class Client { /** * @param args */ public static void main(String[] args) { //UserManager userManager = new UserManagerImpl(); UserManager userManager = new UserManagerImplProxy(new UserManagerImpl()); userManager.addUser("0001", "张三"); } }运行结果:
start-->>addUser() userId-->>0001 UserManagerImpl.addUser() userId-->>0001 success-->>addUser()
动态代理:
业务接口类:
package com.bjpowernode.pattern; public interface UserManager { public String test(String userId); }业务接口实现类:
package com.bjpowernode.pattern; public class UserManagerImpl implements UserManager { public String test(String userId) { System.out.println("UserManagerImpl.findUser() userId-->>" + userId); return "张三"; } }BusinessHandler类:
package com.bjpowernode.pattern; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class BusinessHandler implements InvocationHandler { private Object targetObject; public Object newProxyInstance(Object targetObject) { this.targetObject = targetObject; return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), targetObject.getClass().getInterfaces(), this); } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("start-->>" + method.getName()); for (int i=0; i>" + method.getName()); }catch(Exception e) { e.printStackTrace(); System.out.println("error-->>" + method.getName()); throw e; } return ret; } } 客户端类:
package com.bjpowernode.pattern; import java.lang.reflect.Field; public class Client { /** * @param args */ public static void main(String[] args) { BusinessHandler businessHandler = new BusinessHandler(); UserManager userManager = (UserManager)businessHandler.newProxyInstance(new UserManagerImpl()); //userManager.addUser("0001", "张三"); //userManager.delUser("0001"); // System.out.println(userManager.getClass().getName()); String name = userManager.test("0001"); //String name = ((UserManagerImpl) logHandler.newProxyInstance(new UserManagerImpl())).test("0001"); System.out.println("Client.main() --- " + name); } }运行结果:
start-->>test 0001 UserManagerImpl.findUser() userId-->>0001 success-->>test Client.main() --- 张三
感谢你能够认真阅读完这篇文章,希望小编分享的"Java反射机制中动态代理的示例分析"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
代理
动态
对象
委托
业务
接口
张三
消息
篇文章
静态
运行
机制
反射
模式
程序
示例
分析
客户
客户端
结果
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库上的指标
怎么样查询电脑服务器
数据库 历史交易表
电脑上的网络安全密钥
宇视视频综合管理服务器
网络安全大赛简写是什么
网络技术培训方法
教育信息网络安全研修总结
抖音数据库表
网络安全不可忽视600字
极差制直销软件开发公司电话
张店快消品软件开发咨询
中国名人录数据库人物孙永清
数据库系统工程师资料pdf
数据库中的数据访问页有什么作用
诈骗和网络安全
黄浦区软件开发优势
战地2042 找不到后端服务器
网络安全审查预判指南
北大网络安全推介会
wed服务器不可用怎么办
钢铁企业的软件开发岗位好吗
数字货币下的网络安全
inter服务器硬盘耐用吗
软件开发与发布
广州erp软件开发怎样收费
软件开发bug管理工具
网页制作数据库文本超出怎么办
服务器虚拟机手动迁移
江门采购管理软件开发