房屋租房的动态代理实现


由于静态代理的弊端,代理类和被代理类成对出现,为对其优化产生了被代理类

Rent为租房接口
Host为房东
ProxyInvocationHandler代理类处理程序(负责代理类的生成和处理)
Client(模拟客户)

package demo1;
//动态代理的代理类和真实角色(被代理对象都需要继承指定接口)
//租房
public interface Rent {void rent();
}package demo1;
//房东租房
public class Host implements Rent{public void rent() {System.out.println("房东租房");}
}package demo1;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;//代理类处理程序
//InvocationHandler为了执行代理对象
public class ProxyInvocationHandler implements InvocationHandler {//真实对象(房东)被代理类Rent rent;public void setRent(Rent rent) {this.rent = rent;}public Rent getRentProxy(){return (Rent) Proxy.newProxyInstance(this.getClass().getClassLoader(),rent.getClass().getInterfaces(),this);}public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {log();Object result = method.invoke(rent, args);//执行真实对象的方法after();return result;}//    创建日志(辅助程序)public void log(){System.out.println("看房");}
//    创建public void after(){System.out.println("签合同");}}package demo1;
//客户
public class Client {public static void main(String[] args) {//        真实角色(房东)Host host = new Host();//        客户要租房要创建代理对象(中介)ProxyInvocationHandler proxyInvocationHandler = new ProxyInvocationHandler();
//        设置代理类的  真实角色proxyInvocationHandler.setRent(host);
//        创建代理对象Rent rentProxy = proxyInvocationHandler.getRentProxy();
//      代理对象执行程序rentProxy.rent();}
}

当涉及到我们的web开发时 我们需要对xxxServiceImpl程序需要辅助功能和日志时
XxxServiceImpl为真实对象(被代理类)
XxxService接口
夏利为动态代理实现此日志的添加

package demo2;public interface UserService {void add();void delete();void update();void query();
}package demo2;//真实对象  想要在方法加入日志
public class UserServiceImpl implements UserService{public void add() {System.out.println("执行添加用户方法");}public void delete() {System.out.println("执行删除用户方法");}public void update() {System.out.println("执行更新用户方法");}public void query() {System.out.println("执行查询方法");}
}package demo2;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;public class ProxyInvocationHandler implements InvocationHandler {//    真实对象private Object target;public void setTarget(Object target) {this.target = target;}//    生成代理类对象public Object getTarget(){return Proxy.newProxyInstance(this.getClass().getClassLoader(),target.getClass().getInterfaces(),this);}public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//        加入日志show(method.getName());method.invoke(target,args);return null;}public void show(String name){System.out.println("执行"+name+"方法");}
}package demo2;public class Client {public static void main(String[] args) {//        真实对象UserService userService = new UserServiceImpl();//        生成代理类ProxyInvocationHandler proxyInvocationHandler = new ProxyInvocationHandler();proxyInvocationHandler.setTarget(userService);UserService target = (UserService) proxyInvocationHandler.getTarget();//        执行方法target.delete();}
}

动态代理的中介出租房屋相关推荐

  1. class转java_java动态代理实现与原理详细分析

    关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 一.代理模式    代理模式是常用的java设计模式, ...

  2. java动态代理实现与原理详细分析(代码层面解释了AOP的实现)

    关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 一.代理模式    代理模式是常用的java设计模式, ...

  3. java动态代理实现与原理详细分析(【转载】By--- Gonjan )

    [转载]By---    Gonjan  关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 一.代理模式 ...

  4. (转)java动态代理实现与原理详细分析

    https://www.cnblogs.com/gonjan-blog/p/6685611.html 1.静态代理 静态代理:由程序员创建或特定工具自动生成源代码,也就是在编译时就已经将接口,被代理类 ...

  5. 【java】java动态代理实现与原理详细分析

    文章目录 一.代理模式 二.静态代理 1.静态代理 2.静态代理简单实现 三.动态代理 1.动态代理 2.动态代理简单实现 四.动态代理原理分析 五.总结 关于Java中的动态代理,我们首先需要了解的 ...

  6. java动态代理实现与原理

    java动态代理实现与原理详细分析 关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式–代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 一.代理模式 代理模 ...

  7. 代理模式之详谈动态代理模式(Spring的AOP实现)

    java动态代理实现与原理详细分析 1.代理模式 关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 代理 ...

  8. 从狡猾的房产中介来看动态代理

    代理模式简介 代理模式(Proxy Pattern)是面向对象中一种非常常见的设计模式.其实,不单是在软件开发领域,在我们的日常生活中对于代理也时常可见.比如:房东要将自家的房租出售,于是到房地产中介 ...

  9. (Spring)静态/动态代理模式(AOP底层)

    文章目录 1.静态代理 2.动态代理 1.静态代理 静态代理角色分析 抽象角色 : 一般使用接口或者抽象类来实现 真实角色 : 被代理的角色 代理角色 : 代理真实角色 ; 代理真实角色后 , 一般会 ...

  10. 面试被问到Java 静态代理/动态代理?不用怕,这样子就可以!!

    理解Java动态代理需要对Java的反射机制有一定了解 什么是代理模式# 在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象. 例如,购买火 ...

最新文章

  1. 下一代防火墙的5个优点
  2. 产品经理做市场调研和数据分析的方法
  3. Oauth 2.0概述
  4. gtk不是C语言的专属,c++也可以
  5. 大数据之-Hadoop之HDFS的API操作_判断是文件还是文件夹---大数据之hadoop工作笔记0062
  6. itextpdf html 样式,将HTML解析为PDF的iText样式
  7. 信号与系统sa函数求积分_胡昉祖《导数的概念》和《定积分》
  8. 论文的事情终于可以告一段落了
  9. C# 获取所有网卡信息
  10. matlab2009a安装包,matlab2009a安装
  11. 微型计算机控制技术小论文,微型计算机控制技术结课论文.doc
  12. 微信iPad协议-云控系统-微商工具-云发单-微信机器人
  13. 【毕业设计】单片机森林火灾监控防护预警系统 - 物联网 嵌入式
  14. w7计算机文件夹打开怎么设置密码,怎样设置文件夹密码 Win7系统文件夹加密步骤详解...
  15. 关于《web课程设计》网页设计 用html css做一个漂亮的网站 仿新浪微博个人主页
  16. Mstar方案软件运行基本原理
  17. greedy算法策略高效求解分数背包问题
  18. 网络基本功(二十四):Wireshark抓包实例分析TCP重传
  19. el-table设置表头样式
  20. 爬虫中常见的反爬手段和解决方法

热门文章

  1. 前端轻松破解支付宝AR抢红包
  2. 如何选择期权品种,是做期货期货还是做期权
  3. “不学数学就去当厨子”,兰大校友入选全球竞赛最强10人,决赛最后几小时才想起做题...
  4. Python爬虫之协程
  5. cpython-36m-x86_64-linux-gnu.so undefined symbol玄学解决
  6. git报错unsafe repository xxx is owned by someone else
  7. 课堂派题库格式转换程序
  8. 多重影分身之术!快来领取属于自己的个人智能助手!
  9. Quarkus 初见
  10. Three.js三角形Triangle