`
hotforcc
  • 浏览: 61082 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Proxy dynamic 学习(Webwork2&Struts2 Interceptor Question)

    博客分类:
  • j2se
阅读更多
今天在研究Webwork2&Struts2的时候仔细研究了一下Dynamic proxy。
Dynamic proxy在很多的时候都要用到 ,例如 Spring的AOP, Webwork&Struts2的Interceptor,EJB

proxy与dynamic proxy的区别

业务接口:
HelloWorld .java
java 代码
  1. public interface HelloWorld {   
  2.        void sayHelloWorld() ;   
  3. }  


业务接口实现:
HelloWorldImpl .java
java 代码
  1. public class HelloWorldImpl implements HelloWorld {   
  2.        public void sayHelloWorld() {   
  3.              System.out.println("Hello World!");              
  4.        }   
  5. }   
  6.   
dynamic proxy方式的代理:
HelloWorldHandler .java
java 代码
  1. import java.lang.reflect.InvocationHandler;   
  2. import java.lang.reflect.Method;   
  3. public class HelloWorldHandler implements InvocationHandler {   
  4.        //要代理的原始对象   
  5.        private Object objOriginal;   
  6.        /**  
  7.         * 构造函数。  
  8.         * @param obj 要代理的原始对象。  
  9.         */  
  10.        public HelloWorldHandler(Object obj) {   
  11.               this.objOriginal = obj ;   
  12.        }   
  13.        public Object invoke(Object proxy, Method method, Object[] args)   
  14.                      throws Throwable {               
  15.               Object result ;              
  16.         //方法调用之前   
  17.               doBefore(); //仿佛是AOP的影子,呵呵            
  18.         //调用原始对象的方法   
  19.               result = method.invoke(this.objOriginal ,args);   
  20.         //方法调用之后   
  21.               doAfter();       
  22.               return result ;   
  23.        }   
  24.        private void doBefore() {   
  25.               System.out.println("before method invoke!");   
  26.        }   
  27.        private void doAfter() {   
  28.               System.out.println("after method invoke!");   
  29.        }   
  30. }   
proxy方式的代理
HelloWorldProxy .java
java 代码
  1. public class HelloWorldProxy implements HelloWorld {   
  2.        //要代理的原始对象   
  3.        private HelloWorldImpl objImpl   
  4.        /**  
  5.         * 构造函数。  
  6.         * @param obj 要代理的原始对象。  
  7.         */  
  8.        public HelloWorldHandlerHelloWorldImpl objImpl{   
  9.               this.objImpl= objImpl;   
  10.        }   
  11.        public void sayHelloWorld() {   
  12.              System.out.println("In the Proxy Class!");    
  13.              objImpl.sayHelloWorld();   
  14.           System.out.println("In the Proxy Class!");   
  15.        }     
  16. }  
dynamic proxy方式测试代码:
Test .java
java 代码
  1. import java.lang.reflect.InvocationHandler;   
  2. import java.lang.reflect.Proxy;   
  3. public class Test {   
  4.        public static void main(String[] args) {   
  5.               HelloWorld hw = new HelloWorldImpl();           
  6.               InvocationHandler handler = new HelloWorldHandler(hw);          
  7.               HelloWorld proxy = (HelloWorld) Proxy.newProxyInstance(   
  8.                             hw.getClass().getClassLoader(),   
  9.                             hw.getClass().getInterfaces(),   
  10.                             handler);   
  11.               proxy.sayHelloWorld();   
  12.        }   
  13. }  
Notice:newProxyInstance传递的是一个接口对象。否则会报错
分享到:
评论

相关推荐

    【气动学】基于matlab三种导引律下的弹道仿真【含Matlab源码 8026期】.mp4

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    性能测试面试题宝典-覆盖大部分性能专项面试题

    性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性

    Java工程师面试-笔试部分

    Java工程师面试-笔试部分

    时域门对方向图测量环境改善的研究.pdf

    时域门对方向图测量环境改善的研究

    OCR图片识别和重命名文件软件工具

    OCR批量识别和重命名文件工具 此程序不需要联网,通过调用UWP的库,来实现文字识别 支持:Win10 以上的系统 原理:用系统 OCR 识别图片上的文字 功能: 1、重命名:批量识别文件框选位置的文字,并重命名 2、提取文字:批量识别文件,并提取文字

    在线考试与学习交流网页代码系统 Springboot在线考试与学习交流网页(程序,中文注释)

    在线考试与学习交流网页-在线考试与学习交流网页-在线考试与学习交流网页-在线考试与学习交流网页-在线考试与学习交流网页-在线考试与学习交流网页-在线考试与学习交流网页-在线考试与学习交流网页-在线考试与学习交流网页-在线考试与学习交流网页-在线考试与学习交流网页-在线考试与学习交流网页 1、资源说明:在线考试与学习交流网页源码,本资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 2、适用人群:计算机相关专业(如计算计、信息安全、大数据、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工等学习者,作为参考资料,进行参考学习使用。 3、资源用途:本资源具有较高的学习借鉴价值,可以作为“参考资料”,注意不是“定制需求”,代码只能作为学习参考,不能完全复制照搬。需要有一定的基础,能够看懂代码,能够自行调试代码,能够自行添加功能修改代码。 4. 最新计算机软件毕业设计选题大全(文章底部有博主联系方式): https://blog.csdn.net/2301_79206800/article/details/135931154 技术栈、环境、工具、软件:

    屋顶光伏项目建设方案.docx

    屋顶光伏项目建设方案

    CPH6405-VB一种N-Channel沟道SOT23-6封装MOS管

    30V;6A;RDS(ON)=30mΩ@VGS=10V;VGS=20V;Vth=1.2V

    winhex技术文档CTF更中misc+cypto(部分带视频操作)

    winhex技术文档】CTF更中misc+cypto(部分带视频操作)

    简约科技毕业论文答辩THE GRADUATION OF REPORT答辩模版毕业设计学术报告开题报告通用PPT答辩人: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素材模板手动提交 简约科技毕业论文答辩THE GRADUATION OF REPORT答辩模版毕业设计学术报告开题报告通用PPT答辩人:XXX素材导师:XXX素材模板手动提交

    wxpython中wx.lib.agw.aui子模块编写的获取标准图标添加字体选择功能和查找替换功能高级记事本示例代码IDE通过

    主要功能:新建文件 (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

    基于springboot的智慧社区设计与实现开题报告.docx

    opencv-videoio-ffmpeg.dll

    CMake编译时所需下载的FFMpeg动态库

    装饰工程管理系统 基于Springboot和Mysql的装饰工程管理系统代码(程序,中文注释)

    图书管理系统-图书管理系统-图书管理系统-图书管理系统-图书管理系统-图书管理系统-图书管理系统-图书管理系统-图书管理系统-图书管理系统-图书管理系统-图书管理系统 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++开发指南》全书示例源码、演示软件及使用说明《Qt 6 C++开发指南》全书示例源码

    步进电机选型计算表格 同步带 丝杆

    步进电机选型计算表格

    球体积质量表面积.cpp

    球体积质量表面积.cpp

    CentOS-Base.repo

    yum源

    圆柱电芯自动贴机3D数模图纸 Solidworks设计_三维3D设计图纸.zip

    圆柱电芯自动贴机3D数模图纸 Solidworks设计_三维3D设计图纸.zip

    截取递增数第15届蓝桥省赛Scratch中级组真题第6题-截取递增数(自制素材)

    截取递增数(自制素材)

Global site tag (gtag.js) - Google Analytics