菜鸟硕枫设计模式系列之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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:菜鸟硕枫设计模式系列之14 职责链模式
下一篇:菜鸟硕枫设计模式系列之12 代理模式一

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年03月22日 14时24分52秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

linux php mkdir失败,linux – mkdir错误:参数无效 2019-04-21
config.php渗透,phpMyAdmin 渗透利用总结 2019-04-21
java list 合并 重复的数据_Java ArrayList合并并删除重复数据3种方法 2019-04-21
android volley 上传图片 和参数,android - 使用android中的volley将图像上传到multipart中的服务器 - 堆栈内存溢出... 2019-04-21
android开发的取消清空按钮,Android开发实现带清空按钮的EditText示例 2019-04-21
android gp服务,ArcGIS Runtime SDK for Android开发之调用GP服务(异步调用) 2019-04-21
mysql整体会滚_滚mysql 2019-04-21
向mysql数据库中添加批量数据类型_使用JDBC在MySQL数据库中快速批量插入数据 2019-04-21
最全的mysql 5.7.13_最全的mysql 5.7.13 安装配置方法图文教程(linux) 强烈推荐! 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