菜鸟硕枫设计模式系列之13 代理模式二(动态代理)
发布日期:2021-10-01 08:45:10
浏览次数:3
分类:技术文章
本文共 1916 字,大约阅读时间需要 6 分钟。
java中的动态代理都需要实现一个实现了InvocationHandler接口的代理类,在该类中需要实现invoke方法,并且需要注入你想要代理的目标类对象实例。然后就可以对想要代理的方法进行操作了。 动态代理类图: [img]http://dl.iteye.com/upload/attachment/364557/9fa8283b-9222-3586-9583-19650746cbba.jpg[/img] 具体demo示例: 对象接口package invokeProxy; public interface Person { void work(); void play(); }对象实例:
package invokeProxy; public class Man implements Person{ private String name; public Man(String name){ this.name = name; } public void work() { System.out.println(name+" says Work is very hard"); } public void play() { System.out.println(name+" says Playing is very funny"); } public String getName() { return name; } public void setName(String name) { this.name = name; } }动态代理:
package invokeProxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class DynamicProxy implements InvocationHandler{ private Man man; public DynamicProxy(Man man){ this.man = man; } //参数说明:proxy 代理实例, method,目标方法,args数组,方法中参数 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if(method.getName().equals("work")){ System.out.println("the work method will be run."); method.invoke(man, null); System.out.println("the work method is finished."); } else method.invoke(man, null); return null; } }动态代理测试:
package invokeProxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; public class DynamicProxyTest { public static void main(String[] args){ Man man = new Man("lxy"); InvocationHandler dynamicProxy = new DynamicProxy(man); Class clazz = man.getClass(); //三个参数都不能为空 也就是说被代理类必须有实现某一接口,而且有动态代理对象 Person person = (Person) Proxy.newProxyInstance(clazz.getClassLoader(), clazz.getInterfaces(),dynamicProxy); person.work(); person.play(); } }说明:代理模式是设计模式的重要模式之一,动态代理模式又是java最重要特性反射的示例demo,要重点掌握哈。迭代器模式,观察者模式,三大工厂模式,外观模式是设计模式务必掌握的几个模式。
转载地址:https://blog.csdn.net/iteye_2655/article/details/81970438 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年03月22日 14时24分52秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
linux php mkdir失败,linux – mkdir错误:参数无效
2019-04-21
config.php渗透,phpMyAdmin 渗透利用总结
2019-04-21
android开发的取消清空按钮,Android开发实现带清空按钮的EditText示例
2019-04-21
mysql整体会滚_滚mysql
2019-04-21
向mysql数据库中添加批量数据类型_使用JDBC在MySQL数据库中快速批量插入数据
2019-04-21
mssql连接mysql数据库文件_在本地 怎么远程连接MSSQL数据库
2019-04-21
mssql 远程无法连接mysql_解决SQLServer远程连接失败的问题
2019-04-21
linux mysql c++编程_Linux下进行MYSQL的C++编程起步手记
2019-04-21
Maria数据库怎么复制到mysql_MySQL、MariaDB数据库的AB复制配置过程
2019-04-21
mysql5.6 icp mrr bak_【mysql】关于ICP、MRR、BKA等特性
2019-04-21
mysql utf8跟utf8mb4_MySQL utf8 和 utf8mb4 的区别
2019-04-21
docker mysql开机自启动_Docker学习4-学会如何让容器开机自启服务【坑】
2019-04-21
在mysql中删除表正确的是什么_在MySQL中删除表的操作教程
2019-04-21
mysql有3个共同好友_共同好友mysql
2019-04-21
代理查询 mysql_查询数据库代理设置
2019-04-21
mysql dif_mysqldiff实现MySQL数据表比较
2019-04-21