动态代理的中介出租房屋
房屋租房的动态代理实现
由于静态代理的弊端,代理类和被代理类成对出现,为对其优化产生了被代理类
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();}
}
动态代理的中介出租房屋相关推荐
- class转java_java动态代理实现与原理详细分析
关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 一.代理模式 代理模式是常用的java设计模式, ...
- java动态代理实现与原理详细分析(代码层面解释了AOP的实现)
关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 一.代理模式 代理模式是常用的java设计模式, ...
- java动态代理实现与原理详细分析(【转载】By--- Gonjan )
[转载]By--- Gonjan 关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 一.代理模式 ...
- (转)java动态代理实现与原理详细分析
https://www.cnblogs.com/gonjan-blog/p/6685611.html 1.静态代理 静态代理:由程序员创建或特定工具自动生成源代码,也就是在编译时就已经将接口,被代理类 ...
- 【java】java动态代理实现与原理详细分析
文章目录 一.代理模式 二.静态代理 1.静态代理 2.静态代理简单实现 三.动态代理 1.动态代理 2.动态代理简单实现 四.动态代理原理分析 五.总结 关于Java中的动态代理,我们首先需要了解的 ...
- java动态代理实现与原理
java动态代理实现与原理详细分析 关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式–代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 一.代理模式 代理模 ...
- 代理模式之详谈动态代理模式(Spring的AOP实现)
java动态代理实现与原理详细分析 1.代理模式 关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 代理 ...
- 从狡猾的房产中介来看动态代理
代理模式简介 代理模式(Proxy Pattern)是面向对象中一种非常常见的设计模式.其实,不单是在软件开发领域,在我们的日常生活中对于代理也时常可见.比如:房东要将自家的房租出售,于是到房地产中介 ...
- (Spring)静态/动态代理模式(AOP底层)
文章目录 1.静态代理 2.动态代理 1.静态代理 静态代理角色分析 抽象角色 : 一般使用接口或者抽象类来实现 真实角色 : 被代理的角色 代理角色 : 代理真实角色 ; 代理真实角色后 , 一般会 ...
- 面试被问到Java 静态代理/动态代理?不用怕,这样子就可以!!
理解Java动态代理需要对Java的反射机制有一定了解 什么是代理模式# 在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象. 例如,购买火 ...
最新文章
- 下一代防火墙的5个优点
- 产品经理做市场调研和数据分析的方法
- Oauth 2.0概述
- gtk不是C语言的专属,c++也可以
- 大数据之-Hadoop之HDFS的API操作_判断是文件还是文件夹---大数据之hadoop工作笔记0062
- itextpdf html 样式,将HTML解析为PDF的iText样式
- 信号与系统sa函数求积分_胡昉祖《导数的概念》和《定积分》
- 论文的事情终于可以告一段落了
- C# 获取所有网卡信息
- matlab2009a安装包,matlab2009a安装
- 微型计算机控制技术小论文,微型计算机控制技术结课论文.doc
- 微信iPad协议-云控系统-微商工具-云发单-微信机器人
- 【毕业设计】单片机森林火灾监控防护预警系统 - 物联网 嵌入式
- w7计算机文件夹打开怎么设置密码,怎样设置文件夹密码 Win7系统文件夹加密步骤详解...
- 关于《web课程设计》网页设计 用html css做一个漂亮的网站 仿新浪微博个人主页
- Mstar方案软件运行基本原理
- greedy算法策略高效求解分数背包问题
- 网络基本功(二十四):Wireshark抓包实例分析TCP重传
- el-table设置表头样式
- 爬虫中常见的反爬手段和解决方法
热门文章
- 前端轻松破解支付宝AR抢红包
- 如何选择期权品种,是做期货期货还是做期权
- “不学数学就去当厨子”,兰大校友入选全球竞赛最强10人,决赛最后几小时才想起做题...
- Python爬虫之协程
- cpython-36m-x86_64-linux-gnu.so undefined symbol玄学解决
- git报错unsafe repository xxx is owned by someone else
- 课堂派题库格式转换程序
- 多重影分身之术!快来领取属于自己的个人智能助手!
- Quarkus 初见
- Three.js三角形Triangle