Java设计模式之动态代理
关于Proxy:
1,他是所有动态代理的父类;
2,他可以用作创建动态代理类和动态代理对象;
3,JDK中自带的动态代理。
1,首先创建一个接口,方法申明如下:
package com.proxy;
public interface IDog {
public void bark();
public void guard();
}
2,再创建需要代理的类,并且实现上面的接口:
package com.proxy;
public class ADog implements IDog{
@Override
public void bark() {
System.out.println("卖萌");
}
@Override
public void guard() {
System.out.println("耍宝");
}
}
3,首先创建一个动态代理类,并且实现invocationHandler,具体代码如下:
package com.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class DogHandler implements InvocationHandler{
IDog Dgod ;
public DogHandler() {
}
public DogHandler(IDog dog) {
this.Dgod = dog;
}
/**重写了invactionHandler的方法
*参数发疯别为:被代理对象 需要调用的方法 方法中的参数
*方法传进去后,利用反射调用方法
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("开始");
method.invoke(Dgod, args);
System.out.println("结束");
return null;
}
}
4,写道此处动态代理就完成了,下面i进入测试阶段;代码如下
package com.proxy;
import java.lang.reflect.Proxy;
public class Client {
public static void main(String[] args) {
//创建一个真实对象,用作实参传入DogHandler方法(处理器方法)
IDog dog = new ADog();
//创建处理器对象
DogHandler handler = new DogHandler(dog);
//利用Proxy.newProxyInstance方法创建代理对象,并且把对应的参数传入
//注意
IDog proxy = (IDog)Proxy.newProxyInstance(dog.getClass().getClassLoader(), dog.getClass().getInterfaces(), handler);
//调用方法
proxy.bark();
}
}
优点:由于每次调用代理对象的方法都会调用public Object invoke(Object proxy, Method method, Object[] args)方法,所以可以在此方法中调用一些重复性较高的代码,以此提高代码的可读性和可维护性。
Java设计模式之动态代理的更多相关文章
- Java设计模式—Proxy动态代理模式
代理:设计模式 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理. 图 1. 代 ...
- java设计模式之动态代理的概述和实现
概述 1.代理:本来应该自己做的事情,请了别人来做,被请的人就是代理对象. 举例:春节回家买票让人代买 2.在Java中java.lang.reflect包下提供了一个Proxy类和一个Invocat ...
- java 笔记(3) —— 动态代理,静态代理,cglib代理
0.代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口. 代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等. 代理类与委托类之间通常会存 ...
- 杨晓峰-Java核心技术-6 动态代理 反射 MD
目录 第6讲 | 动态代理是基于什么原理? 典型回答 考点分析 知识扩展 反射机制及其演进 动态代理 精选留言 Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAnd ...
- 十分钟理解Java中的动态代理
十分钟理解 Java 中的动态代理 一.概述 1. 什么是代理 我们大家都知道微商代理,简单地说就是代替厂家卖商品,厂家“委托”代理为其销售商品.关于微商代理,首先我们从他们那里买东西时通常不知道 ...
- 一文读懂Java中的动态代理
从代理模式说起 回顾前文: 设计模式系列之代理模式(Proxy Pattern) 要读懂动态代理,应从代理模式说起.而实现代理模式,常见有下面两种实现: (1) 代理类关联目标对象,实现目标对象实现的 ...
- java反射和动态代理实现与原理详细分析
关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 一.代理模式 代理模式是常用的java设计模式, ...
- 使用Java中的动态代理实现数据库连接池
2002 年 12 月 05 日 作者通过使用JAVA中的动态代理实现数据库连接池,使使用者可以以普通的jdbc连接的使用习惯来使用连接池. 数据库连接池在编写应用服务是经常需要用到的模块,太过频繁的 ...
- java中的动态代理机制
java中的动态代理机制 在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface).另一个则是 Proxy(Class),这一个类和接口是实现 ...
随机推荐
- python 类和元类(metaclass)的理解和简单运用
(一) python中的类 首先这里讨论的python类,都基于继承于object的新式类进行讨论. 首先在python中,所有东西都是对象.这句话非常重要要理解元类我要重新来理解一下python中的 ...
- ulimit -c unlimited的使用(转载)
ulimit -c unlimited ulimint -a 用来显示当前的各种用户进程限制Linux对于每个用户,系统限制其最大进程数,为提高性能,可以根据设备资源情况,设置个Linux用户的最大进 ...
- react中constructor()和super()的具体含义以及如何使用
1.constructor()---super( )的基本含义 constructor()--构造方法 这是ES6对类的默认方法,通过new命令生成对象实例时自动调用该方法.并且,该方法是类中必须有的 ...
- 我了解到的新知识之----如何使用Python获取最新外汇汇率信息
这个需求本来是来源于公司同事工作中需求,用户需要使用数据分析工具Power BI抓取多页的中国银行官网上当天的外汇数据.但是没能研究出来. 我就开始在网络上找关于使用python来抓取当天汇率的案例分 ...
- mysql中find_in_set的使用
首先举个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文等等 .现在有篇文章他既是头条,又是热点,还是图文,type中以 1,3,4 的格式存储.那我 ...
- FPGA验证之SystemVerilog+UVM
[转载]https://blog.csdn.net/lijiuyangzilsc/article/details/50879545 数字芯片和FPGA的验证.主要是其中的功能仿真和时序仿真. ...
- 2018-2019-2 20165236 《网络对抗技术》Exp4 恶意代码分析
2018-2019-2 20165236 <网络对抗技术>Exp4 恶意代码分析 一.1.实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行; 1.2是分析一个恶意软件, ...
- 时序图中的生命线与类绑定(EA)
使用时序图时序图( Sequence Diagram)时,有时候在起初拖放放的对象生命线未绑定相关的类. 如果: 但在后期需要和类进行绑定. 那么需要如下设置,右键你要关联的对象生命线,选择Advan ...
- 2019春第五周作业Compile Summarize
这个作业属于哪个课程 C语言程序设计II 这个作业要求在哪里 在这里 我在这个课程的目标是 能够精通关于数组内部运作原理 这个作业在哪个具体方面帮助我实现目标 如何输出一行的连续字符 参考文献与网址 ...
- ui component 是一个前端 mvc 开发框架