今天在研究Webwork2&Struts2的时候仔细研究了一下Dynamic proxy。
Dynamic proxy在很多的时候都要用到 ,例如 Spring的AOP, Webwork&Struts2的Interceptor,EJB
proxy与dynamic proxy的区别
业务接口:
HelloWorld .java
java 代码
- public interface HelloWorld {
- void sayHelloWorld() ;
- }
业务接口实现:
HelloWorldImpl .java
java 代码
- public class HelloWorldImpl implements HelloWorld {
- public void sayHelloWorld() {
- System.out.println("Hello World!");
- }
- }
-
dynamic proxy方式的代理:
HelloWorldHandler .java
java 代码
- import java.lang.reflect.InvocationHandler;
- import java.lang.reflect.Method;
- public class HelloWorldHandler implements InvocationHandler {
-
- private Object objOriginal;
-
-
-
-
- public HelloWorldHandler(Object obj) {
- this.objOriginal = obj ;
- }
- public Object invoke(Object proxy, Method method, Object[] args)
- throws Throwable {
- Object result ;
-
- doBefore();
-
- result = method.invoke(this.objOriginal ,args);
-
- doAfter();
- return result ;
- }
- private void doBefore() {
- System.out.println("before method invoke!");
- }
- private void doAfter() {
- System.out.println("after method invoke!");
- }
- }
proxy方式的代理
HelloWorldProxy .java
java 代码
- public class HelloWorldProxy implements HelloWorld {
-
- private HelloWorldImpl objImpl
-
-
-
-
- public HelloWorldHandlerHelloWorldImpl objImpl{
- this.objImpl= objImpl;
- }
- public void sayHelloWorld() {
- System.out.println("In the Proxy Class!");
- objImpl.sayHelloWorld();
- System.out.println("In the Proxy Class!");
- }
- }
dynamic proxy方式测试代码:
Test .java
java 代码
- import java.lang.reflect.InvocationHandler;
- import java.lang.reflect.Proxy;
- public class Test {
- public static void main(String[] args) {
- HelloWorld hw = new HelloWorldImpl();
- InvocationHandler handler = new HelloWorldHandler(hw);
- HelloWorld proxy = (HelloWorld) Proxy.newProxyInstance(
- hw.getClass().getClassLoader(),
- hw.getClass().getInterfaces(),
- handler);
- proxy.sayHelloWorld();
- }
- }
Notice:newProxyInstance传递的是一个接口对象。否则会报错
分享到:
相关推荐
Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性
Java工程师面试-笔试部分
时域门对方向图测量环境改善的研究
OCR批量识别和重命名文件工具 此程序不需要联网,通过调用UWP的库,来实现文字识别 支持:Win10 以上的系统 原理:用系统 OCR 识别图片上的文字 功能: 1、重命名:批量识别文件框选位置的文字,并重命名 2、提取文字:批量识别文件,并提取文字
在线考试与学习交流网页-在线考试与学习交流网页-在线考试与学习交流网页-在线考试与学习交流网页-在线考试与学习交流网页-在线考试与学习交流网页-在线考试与学习交流网页-在线考试与学习交流网页-在线考试与学习交流网页-在线考试与学习交流网页-在线考试与学习交流网页-在线考试与学习交流网页 1、资源说明:在线考试与学习交流网页源码,本资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 2、适用人群:计算机相关专业(如计算计、信息安全、大数据、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工等学习者,作为参考资料,进行参考学习使用。 3、资源用途:本资源具有较高的学习借鉴价值,可以作为“参考资料”,注意不是“定制需求”,代码只能作为学习参考,不能完全复制照搬。需要有一定的基础,能够看懂代码,能够自行调试代码,能够自行添加功能修改代码。 4. 最新计算机软件毕业设计选题大全(文章底部有博主联系方式): https://blog.csdn.net/2301_79206800/article/details/135931154 技术栈、环境、工具、软件:
屋顶光伏项目建设方案
30V;6A;RDS(ON)=30mΩ@VGS=10V;VGS=20V;Vth=1.2V
winhex技术文档】CTF更中misc+cypto(部分带视频操作)
简约科技毕业论文答辩THE GRADUATION OF REPORT答辩模版毕业设计学术报告开题报告通用PPT答辩人:XXX素材导师:XXX素材模板手动提交 简约科技毕业论文答辩THE GRADUATION OF REPORT答辩模版毕业设计学术报告开题报告通用PPT答辩人:XXX素材导师:XXX素材模板手动提交 简约科技毕业论文答辩THE GRADUATION OF REPORT答辩模版毕业设计学术报告开题报告通用PPT答辩人:XXX素材导师:XXX素材模板手动提交 简约科技毕业论文答辩THE GRADUATION OF REPORT答辩模版毕业设计学术报告开题报告通用PPT答辩人:XXX素材导师:XXX素材模板手动提交 简约科技毕业论文答辩THE GRADUATION OF REPORT答辩模版毕业设计学术报告开题报告通用PPT答辩人:XXX素材导师:XXX素材模板手动提交 简约科技毕业论文答辩THE GRADUATION OF REPORT答辩模版毕业设计学术报告开题报告通用PPT答辩人:XXX素材导师:XXX素材模板手动提交
主要功能:新建文件 (on_new 方法):创建一个新的 TextCtrl 控件,并将其添加到笔记本中,标签为“新建文件”。打开文件 (on_open 方法):使用 wx.FileDialog 弹出文件选择对话框,让用户选择一个文本文件。读取选中的文件内容,并将其显示在新的 TextCtrl 控件中,标签为文件名。保存文件 (on_save 方法):使用 wx.FileDialog 弹出文件保存对话框,让用户选择保存位置。将当前页面的内容保存到指定文件。撤销操作 (on_undo 方法):撤销当前页面的上一步操作。重做操作 (on_redo 方法):重做当前页面的上一步操作。剪切操作 (on_cut 方法):剪切当前页面的选中内容。复制操作 (on_copy 方法):复制当前页面的选中内容。粘贴操作 (on_paste 方法):粘贴剪贴板中的内容到当前页面。查找和替换 (on_find_replace 方法):弹出对话框让用户输入查找内容和替换内容。替换当前页面中的内容。选择字体和颜色 (on_choose_font 方法):使用 wx.FontDialog 让用户选择字体。
基于springboot的智慧社区设计与实现开题报告.docx
CMake编译时所需下载的FFMpeg动态库
图书管理系统-图书管理系统-图书管理系统-图书管理系统-图书管理系统-图书管理系统-图书管理系统-图书管理系统-图书管理系统-图书管理系统-图书管理系统-图书管理系统 1、资源说明:图书管理系统源码,本资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 2、适用人群:计算机相关专业(如计算计、信息安全、大数据、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工等学习者,作为参考资料,进行参考学习使用。 3、资源用途:本资源具有较高的学习借鉴价值,可以作为“参考资料”,注意不是“定制需求”,代码只能作为学习参考,不能完全复制照搬。需要有一定的基础,能够看懂代码,能够自行调试代码,能够自行添加功能修改代码。 4. 最新计算机软件毕业设计选题大全(文章底部有博主联系方式): https://blog.csdn.net/2301_79206800/article/details/135931154 技术栈、环境、工具、软件: ① 系统环境:Windows ② 开发语言:Java ③ 框架:SpringBoot ④ 架构:B/S、MVC ⑤ 开发环境:IDE
《Qt 6 C++开发指南》全书示例源码、演示软件及使用说明《Qt 6 C++开发指南》全书示例源码、演示软件及使用说明《Qt 6 C++开发指南》全书示例源码、演示软件及使用说明《Qt 6 C++开发指南》全书示例源码、演示软件及使用说明《Qt 6 C++开发指南》全书示例源码、演示软件及使用说明《Qt 6 C++开发指南》全书示例源码、演示软件及使用说明《Qt 6 C++开发指南》全书示例源码、演示软件及使用说明《Qt 6 C++开发指南》全书示例源码、演示软件及使用说明《Qt 6 C++开发指南》全书示例源码、演示软件及使用说明《Qt 6 C++开发指南》全书示例源码、演示软件及使用说明《Qt 6 C++开发指南》全书示例源码、演示软件及使用说明《Qt 6 C++开发指南》全书示例源码、演示软件及使用说明《Qt 6 C++开发指南》全书示例源码、演示软件及使用说明《Qt 6 C++开发指南》全书示例源码、演示软件及使用说明《Qt 6 C++开发指南》全书示例源码、演示软件及使用说明《Qt 6 C++开发指南》全书示例源码、演示软件及使用说明《Qt 6 C++开发指南》全书示例源码
步进电机选型计算表格
球体积质量表面积.cpp
yum源
圆柱电芯自动贴机3D数模图纸 Solidworks设计_三维3D设计图纸.zip
截取递增数(自制素材)