- 浏览: 759970 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
Ripin_Yan:
写的挺透彻
session与cookie的区别? -
1045565111:
谢谢,运行起来了,非常不错~~~
EXTJS动态树的实现 -
hlxhf5000:
找了半天,机会都没有全套的下载
ExtJs视频教程集锦 -
slysuccess:
讲解的非常好!以前还不是太明白,现在终于明白了!谢谢博主
ExtJs中关于grid和store的应用分析(二) -
yixiandave:
怎么看都蛋疼啊。。
js继承的实现
代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。
在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式一般涉及到的角色有
抽象角色:声明真实对象和代理对象的共同接口
代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装
真实角色:代理角色所代表的真实对象,是我们最终要引用的对象
动态代理中最关键的两点是:
InvocationHandler 接口的实现
Proxy.newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)的方法的调用
一、原理示例
java 代码
- /*
- * 创建日期 2007-3-13
- *
- * TODO 要更改此生成的文件的模板,请转至
- * 窗口 - 首选项 - Java - 代码样式 - 代码模板
- */
- package com.langsin.proxy;
- // 抽象角色
- abstract public class Subject
- {
- abstract public void request();
- }
java 代码
- package com.langsin.proxy;
- //真实角色:实现了Subject的request()方法
- public class RealSubject extends Subject
- {
- public RealSubject()
- {
- }
- public void request()
- {
- System.out.println("From real subject.");
- }
- }
java 代码
- package com.langsin.proxy;
- //代理角色
- public class ProxySubject extends Subject
- {
- private RealSubject realSubject; // 以真实角色作为代理角色的属性
- public ProxySubject()
- {
- }
- public void request() // 该方法封装了真实对象的request方法
- {
- preRequest();
- if (realSubject == null)
- {
- realSubject = new RealSubject();
- }
- realSubject.request(); // 此处执行真实对象的request方法
- postRequest();
- }
- private void preRequest()
- {
- // something you want to do before requesting
- }
- private void postRequest()
- {
- // something you want to do after requesting
- }
- }
java 代码
- package com.langsin.proxy;
- //客户端调用
- public class Client
- {
- public static void main(String[] args)
- {
- Subject sub = new ProxySubject();
- sub.request();
- }
- }
二、应用示例一、
java 代码
- package com.langsin.dynamicproxy;
- //抽象角色(之前是抽象类,此处应改为接口):
- public interface Subject
- {
- abstract public void request();
- }
java 代码
- package com.langsin.dynamicproxy;
- //具体角色
- public class RealSubject implements Subject
- {
- public RealSubject()
- {
- }
- public void request()
- {
- System.out.println("From real subject.");
- }
- }
java 代码
- package com.langsin.dynamicproxy;
- import java.lang.reflect.InvocationHandler;
- import java.lang.reflect.Method;
- import java.lang.reflect.Proxy;
- import java.util.List;
- import java.util.Vector;
- public class VectorProxy implements InvocationHandler
- {
- private Object proxyobj;
- public VectorProxy(Object obj)
- {
- proxyobj = obj;
- }
- public static Object factory(Object obj)
- {
- Class cls = obj.getClass();
- return Proxy.newProxyInstance(cls.getClassLoader(),
- cls.getInterfaces(), new VectorProxy(obj));
- }
- public Object invoke(Object proxy, Method method, Object[] args)
- throws Throwable
- {
- System.out.println("before calling " + method);
- if (args != null)
- {
- for (int i = 0; i < args.length; i++)
- {
- System.out.println(args[i] + "");
- }
- }
- Object object = method.invoke(proxyobj, args);
- System.out.println("after calling " + method);
- return object;
- }
- @SuppressWarnings("unchecked")
- public static void main(String[] args)
- {
- List<string></string> v = (List<string></string>) factory(new Vector<string></string>(10));
- v.add("New");
- v.add("York");
- System.out.println(v);
- v.remove(0);
- System.out.println(v);
- }
- }
应用代码二、
java 代码
- package com.langsin.dynamicproxy;
- public interface Foo
- {
- void doAction();
- }
java 代码
- package com.langsin.dynamicproxy;
- public class FooImpl implements Foo
- {
- public FooImpl()
- {
- }
- public void doAction()
- {
- System.out.println("in FooImp1.doAction()");
- }
- }
java 代码
- package com.langsin.dynamicproxy;
- public class FooImpl2 implements Foo
- {
- public FooImpl2()
- {
- }
- public void doAction()
- {
- System.out.println("in FooImp2.doAction()");
- }
- }
java 代码
- package com.langsin.dynamicproxy;
- import java.lang.reflect.InvocationHandler;
- import java.lang.reflect.Method;
- public class CommonInvocationHandler implements InvocationHandler
- {
- // 动态执行对象,需要回调的对象
- private Object target;
- // 支持构造子注射
- public CommonInvocationHandler()
- {
- }
- // 支持构造子注射
- public CommonInvocationHandler(Object target)
- {
- setTarget(target);
- }
- /**
- *
- * 采用setter方法注射
- *
- * @param target
- *
- */
- public void setTarget(Object target)
- {
- this.target = target;
- }
- /**
- *
- * 调用proxy中指定的方法method,并传入参数列表args
- *
- * @param proxy
- * 代理类的类型,例如定义对应method的代理接口
- *
- * @param method
- * 被代理的方法
- *
- * @param args
- * 调用被代理方法的参数
- *
- * @return
- *
- * @throws java.lang.Throwable
- *
- */
- public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
- {
- return method.invoke(target, args);
- }
- }
java 代码
- package com.langsin.dynamicproxy;
- import java.lang.reflect.Proxy;
- public class Demo
- {
- public static void main(String[] args)
- {
- // 1.通用的动态代理实现
- CommonInvocationHandler handler = new CommonInvocationHandler();
- Foo f;
- // 2.接口实现1
- handler.setTarget(new FooImpl());
- // 方法参数说明:代理类、代理类实现的接口列表、代理类的处理器
- // 关联代理类、代理类中接口方法、处理器,当代理类中接口方法被调用时,会自动分发到处理器的invoke方法
- // 如果代理类没有实现指定接口列表,会抛出非法参数异常
- f = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(),
- new Class[] { Foo.class },
- handler);
- f.doAction();
- // 3.接口实现2
- handler.setTarget(new FooImpl2());
- f = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(),
- new Class[] { Foo.class },
- handler);
- f.doAction();
- }
- }
发表评论
-
jvm设置大全
2016-12-18 13:28 583jvm配置大全 http://www.cnblogs.co ... -
java类注释模板
2008-01-07 23:29 6473/** * @{#} ${file_name} ... -
集合类的应用
2007-11-30 15:56 1756刚学集合的人可能会搞不明白一些东西,原因是集合类太多了,不知道 ... -
==与equals的解说
2007-11-29 12:11 1750==与equals,你能确定“==”表示的是比较内存地址,而“ ... -
java.lang.reflect.Array的应用
2007-11-29 11:09 7889java.lang.Array 类提供了动态创建和访问数组元素 ... -
Java语言的反射机制
2007-11-28 18:15 1933在JAVA运行环境中,对于 ... -
@Documented Annotation的使用
2007-11-28 17:29 12357@Documented Annotation的使用: @Doc ... -
有关Annotation的继承
2007-11-28 16:34 12645有关Annotation的继承说明: 1、JDK文档中的说明是 ... -
@Target Annotation的使用
2007-11-28 16:29 8824@Target Annotation的使用 @Target A ... -
告知编译程序如何处理@Retention
2007-11-28 11:32 1850告知编译程序如何处理@Retention: java.lang ... -
自定义Annotation类型
2007-11-28 10:20 5605自定义Annotation类型:标识符(marker Anno ... -
使用JDK内建Annotation
2007-11-27 21:39 25411、Override 强制检查子类的方法重写 java 代 ...
相关推荐
yolo算法-电线杆数据集-1493张图像带标签-.zip;yolo算法-电线杆数据集-1493张图像带标签-.zip;yolo算法-电线杆数据集-1493张图像带标签-.zip
yolo算法-电线杆数据集-7255张图像带标签-杆顶.zip;yolo算法-电线杆数据集-7255张图像带标签-杆顶.zip;yolo算法-电线杆数据集-7255张图像带标签-杆顶.zip;yolo算法-电线杆数据集-7255张图像带标签-杆顶.zip
python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。
Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
中国高质量发展指标体系-最新发布.zip
环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上
环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上
yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值
PartSegCore_compiled_backend-0.12.0a0-cp36-cp36m-win_amd64.whl.rar
python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。
中国企业统计年鉴全集(1990-2020,除1997年).zip
PartSegCore_compiled_backend-0.12.0a0-cp36-cp36m-win_amd64.whl.rar
yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值
环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上
内含PCB设计案例,可直接打样出成果
python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。
python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。
中国各省市进出口面板数据集.zip
环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上
appium test for self 1. env create 2.coding