`
hotforcc
  • 浏览: 61080 次
  • 性别: 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传递的是一个接口对象。否则会报错
分享到:
评论

相关推荐

    Castle Dynamic Proxy代理使用

    2. 高性能: Castle Dynamic Proxy使用Emit和委托等技术生成代理类型,调用真实类的方法,性能方面也没有太多损失。 3. 灵活的拦截处理: Castle Dynamic Proxy提供了灵活的拦截处理机制,可以拦截方法调用,进行...

    Castle.DynamicProxy2.dll

    Castle框架注入依赖所需dll Version:2.1.0.0

    struts2漏洞升级

    通常,Struts2的安全漏洞主要涉及Action、Result、Interceptor等核心组件,或者是OGNL(Object-Graph Navigation Language)表达式中的安全问题。 在Struts2的历史中,有几次著名的漏洞事件,如CVE-2017-5638(S2-...

    Struts2 拦截器 和 Java 中的动态代理

    在Struts2中,拦截器(Interceptor)是一个关键概念,它扮演着处理请求、添加额外功能和增强应用行为的角色。本文将深入探讨Struts2拦截器的原理以及它与Java中的动态代理之间的联系。 首先,让我们了解Struts2拦截...

    EXTJS4+STRUTS2+JAVA增删改查

    STRUTS2的核心是Action和Interceptor,Action处理用户的请求,Interceptor处理业务逻辑和数据验证。在EXTJS4与STRUTS2的集成中,STRUTS2作为后端服务器,接收EXTJS4发起的Ajax请求,执行相应的业务逻辑,并返回处理...

    ext整合struts2

    2. **Interceptor(拦截器)**:拦截器是Struts2的核心特性之一,它们是处理请求和响应之间的一个个中间层,可以实现如日志、权限检查等功能。 3. **配置文件**:通常为struts.xml,用来配置Action、结果类型、拦截...

    spring+struts2图书管理系统

    同时,我们需要在Struts2的配置文件中指定Spring的Action代理(Spring-Action-Proxy),这样,Struts2的Action实例将由Spring管理。 在图书管理系统中,我们可以定义一个Spring Bean来代表图书实体类,包含了如书名...

    Xwork——Struts2核心

    ### Xwork——Struts2核心 #### Xwork与Struts2的关系 Xwork作为Struts2的核心组件之一,它的设计理念和技术实现对整个Struts2框架起着决定性的作用。Struts2是一个流行的Java Web开发框架,它采用了MVC(Model-...

    完整版csapp proxy lab 满分原创(北大&cmu;)

    亲测好用,挺不错的资源,大家快来下载吧!挺有用的!需要的话可以来下载哦!可以拿到满分的网络代理,采用读者优先的方式避免竞争,避免了pipe broken造成的服务器中断。

    flex与struts2整合

    ### Flex与Struts2整合详解 #### 一、引言 Flex与Struts2的整合是一种将Adobe Flex作为前端富客户端界面技术与Struts2框架作为后端MVC架构进行结合的方法,以此来构建高性能、高响应度的Web应用程序。通过这种整合...

    08spring4_dynamicproxy.rar

    package cn.sxt.dynamicproxy; import java.util.ArrayList; import java.util.List; import cn.sxt.service.UserService; import cn.sxt.service.UserServiceImpl; public class Client { public ...

    proxy2proxy多级协议代理软件-v1.0.2.129版本

     proxy2proxy 多级协议代理软件当前支持32/64位Windows7/8/10等操作系统。  proxy2proxy 多级协议代理软件特点:  1)支持单级/多级协议代理服务。  2)支持 HTTP/HTTPS 协议网络代理。  3)支持大规模网络...

    DynamicProxy

    这是动态代理的简单实例,方便学,入手.这个例子非常的简单哦!

    geneve-proxy 代理程序,接收目的端口6081的报文,并将报文地址转换后发送出去

    说明: 1. geneve-proxy-main 运行依赖PyYAML-5.3.1 和python3 2. 安装PyYAML-5.3.1 2.1 解压PyYAML-5.3.1.tar.gz,进入解压目录。解压命令:tar -zxvf PyYAML-... python3 main.py > /var/log/geneve-proxy.log 2>&1 &

    Proxy 模式学习代码

    2. **JDK动态代理**:Java的`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口提供了动态生成代理对象的能力。在运行时,我们可以根据接口创建代理对象,而无需预先编写代理类。`...

    SpringIOC,DI+dynamic proxy 实现盗版AOP

    本文将深入探讨如何使用Spring的IOC和DI特性,结合动态代理(Dynamic Proxy)来实现一种类似AOP(面向切面编程)的功能,以达到在不修改原有代码的情况下增强或拦截方法调用的目的。 **一、Spring IOC(控制反转)*...

    extjs 跟 struts+json

    - Struts 2的基本架构,包括Action类、Result类型、Interceptor拦截器等核心概念。 - 如何创建一个简单的Struts 2应用,配置struts.xml文件以定义Action和结果映射。 - 使用Struts 2的JSON插件,使Action能够返回...

    struts2工作原理

    Struts2是一个基于MVC(Model-View-Controller)设计模式的开源JavaEE框架,它为构建企业级Web应用程序提供了强大的支持。理解Struts2的工作原理对于开发人员来说至关重要,因为它可以帮助我们更好地优化代码,提高...

    DynamicProxy.zip

    DynamicProxy.zip

    学习struts2--会用前先明白原理

    - Struts2作为Struts1的进化版,基于WebWork,提供了更好的插件支持,如Spring和Hibernate集成。 2. 相关术语: - HTTP:超文本传输协议,基于TCP/IP通信,用于传输Web内容。 - Servlet:Java编程接口,用于处理...

Global site tag (gtag.js) - Google Analytics