`
xinyu_yang77
  • 浏览: 13666 次
  • 来自: SH
社区版块
存档分类
最新评论

动态代理(JDK1.3+)

阅读更多

一:概念<o:p></o:p>

nProxy:

Proxy作为clienttarget的中间人,可以做如Synchronization, Authentication, Remote Access, Lazy instantiation等工作[1].

nDynamic Proxy

Hard code一些proxy任务令人乏味,如果定义一个 InvocationHandler interface, coder给出implementation, 框架实现一个proxy, proxy将任务转移给handler处理,既灵活,又简洁. <o:p></o:p>

二:JDK 1.3+ Dynamic Proxy参与者<o:p></o:p>

(1)Client: 调用方<o:p></o:p>

(2)Proxy:  Proxy.newProxyInstance动态生成的代理实例<o:p></o:p>

(3)InvocationHandler: proxy将实际的代理动作交给此接口的实现完成<o:p></o:p>

(4)Target: 被代理对象<o:p></o:p>

三:JDK 1.3+ Dynamic Proxy的实作<o:p></o:p>

(1) 实现InvocationHandler接口, 写出invoke方法体<o:p></o:p>

(2) 生成代理实例, 通过代理实例调用<o:p></o:p>

四:Sample<o:p></o:p>

Handler:

  1. public class LogHandler implements InvocationHandler {   
  2.   
  3.      Object target = null;   
  4.   
  5.      public LogHandler(Object target) {   
  6.   
  7.          this.target = target;   
  8.   
  9.      }   
  10.   
  11.         
  12.   
  13.      public Object invoke(Object proxy, Method m, Object[] args) throws Throwable {   
  14.   
  15.           System.out.println(m.getName() + " start!");   
  16.   
  17.           Object ret = m.invoke(target, args);   
  18.   
  19.           System.out.println(m.getName() + " end!");   
  20.   
  21.           return ret;   
  22.   
  23.      }   
  24.   
  25. }   

Client:

  1.      Rect rect = new Rect();   
  2.   
  3.      ClassLoader loader = IShape.class.getClassLoader();   
  4.   
  5.      IShape shape = (IShape)Proxy.newProxyInstance(loader,    
  6.   
  7.                                                     new Class[]{IShape.class},    
  8.   
  9.                                                     new LogHandler(rect));   
  10.   
  11.      shape.draw();   

五:已知应用

  (1) Spring AOP Framework

<o:p>

六:已知限制

  (1) 只能proxy interface, 不能proxy class. Spring AOP Framework的替代作法是用CGLib;

</o:p>

七:注释<o:p></o:p>

  [1] 相对于Decorator来说,前者侧重于控制,后者侧重于增加新功能.<o:p></o:p>

分享到:
评论

相关推荐

    代理模式(Proxy Pattern) 1. 概述 1.1 基本概念 1.2 为什么需要代理模式 1.3 代理模式的四个角色 2. 代理模式的类型 2.1 静态代理 2.2 JDK动态代理

    代理模式(Proxy Pattern) 1. 概述 1.1 基本概念 1.2 为什么需要代理模式 1.3 代理模式的四个角色 2. 代理模式的类型 2.1 静态代理 2.2 JDK动态代理 ...9.4 CGLIB代理和JDK动态代理有什么区别? 10. 总结

    Spring Aop的底层实现技术 --- Jdk动态代理原理

    在 JDK 1.3 以后,JDK 动态代理技术提供了实现 AOP 的绝好底层技术。JDK 动态代理主要涉及到 java.lang.reflect 包中的两个类:Proxy 和 InvocationHandler。 InvocationHandler 是一个接口,可以通过实现该接口...

    AOP的实现机制

    Java在JDK1.3后引入的动态代理机制,使我们可以在运行期动态的创建代理类。使用动态代理实现AOP需要有四个角色:被代理的类,被代理类的接口,织入器,和InvocationHandler,而织入器使用接口反射机制生成一个代理类...

    java模式设计-代理模式之动态代理.ppt

    动态代理在JDK 1.3及以后的版本中得到了支持,主要涉及到三个核心类:`Proxy`、`InvocationHandler`和`Method`。 `Proxy`类是用于创建动态代理的关键。它可以生成一个实现了特定接口的代理对象,这些接口由用户在...

    J2SE动态代理解析

    Java平台标准版(J2SE)中的动态代理技术是自JDK 1.3版本引入的一个强大特性,它使得开发者可以在程序运行时动态地创建符合特定接口的代理对象。动态代理在实际应用中广泛用于实现面向切面编程(AOP),如日志记录、...

    Kotlin1.3.72.rar

    反射在很多场景下都非常有用,例如元编程、序列化、动态代理等。 2. `kotlinx-coroutines-core-1.3.7.jar` 和 `kotlinx-coroutines-core-1.1.1.jar`:Kotlinx.coroutines是一个扩展库,提供了异步编程的支持,尤其...

    Java理论与实践:用动态代理进行修饰

    Java 动态代理是一种强大的工具,它首次出现在JDK 1.3中,位于`java.lang.reflect`包中。动态代理允许程序创建代理对象,这些对象可以实现一个或多个已知接口,并通过反射来处理方法调用。这种方法使得在运行时能够...

    james-2.3.2

    -To build form CVS you must set JAVA_HOME to the jdk dir (eg:/usr/bin/jdk1.3 or c:\jdk1.3) Note for JDK1.4 users, please remove xerces.jar from Phoenix's lib dir. This is because JDK 1.4 comes...

    cglib包及依赖汉cglib3.1和asm4.2

    JDK自从1.3版本开始,就引入了动态代理,并且经常被用来动态地创建代理。JDK的动态代理用起来非常简单,但它有一个限制,就是使用动态代理的对象必须实现一个或多个接口。如果想代理没有实现接口的继承的类,该...

    代理模式(动态)

    在Java中,动态代理是代理模式的一种实现方式,尤其在JDK 1.3及之后的版本中得到了官方库的支持。动态代理主要涉及到三个核心类:`Proxy`、`InvocationHandler`和`Method`。 `Proxy`类是Java动态代理的核心,它能够...

    java语言反射与动态代理学习笔记

    **4.1 JDK动态代理**:基于`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口实现。`Proxy.newProxyInstance()`方法用于创建代理对象,而`InvocationHandler`则定义了代理对象的行为。 **...

    weblogic集群安装及nginx https反向代理及负载均衡配置

    ##### 1.3 支持软件 - **JDK**:WebLogic Server 要求特定版本的 JDK 运行,通常情况下建议使用 Oracle 提供的 JDK 1.7 或更高版本。 - **WebLogic Server 版本**:根据实际需求选择合适的 WebLogic Server 版本,如...

    java模式设计--代理模式

    动态代理则是Java在JDK 1.3之后引入的特性,通过`java.lang.reflect.Proxy`和`java.lang.reflect.InvocationHandler`两个核心类实现。动态代理在运行时创建代理对象,无需预先编写代理类,这使得代码更具有灵活性。`...

    java编写webservice实例

    AXIS1.3版本提供了SOAP绑定、WSDL生成和客户端代理类自动生成等功能,简化了Web服务的开发过程。 3. **JDK1.6**: Java Development Kit (JDK) 是Java开发的必备工具集,包括Java编译器、JRE(Java Runtime ...

    Spring2.5+Hibernate3.3+Struts1.3整合需要用到的所有jar文件

    1. **设置环境**:确保JDK、Tomcat或其他应用服务器已经安装并配置好。 2. **引入jar文件**:将压缩包`lib`中的所有jar文件添加到项目的类路径中。这些文件可能包括Spring、Hibernate、Struts的核心库,以及它们的...

    SpringBoot下的SpringAOP-day04-源代码

    1.1 JDK动态代理特点 1.2 CGlib动态代理 1.2.1 CGLib特点说明 1.3 动态代理的作用 2 Spring中的AOP 2.1 AOP介绍 2.2 AOP中专业术语(难点) 2.3 AOP 入门案例 2.3.1 创建一个SpringBoot的module 2.3.1 导入jar包 2.3.2...

    Turbine Tutorial

    100% 纯 Java 实现,兼容 JDK 1.3+,遵循 J2EE 规范,基于 Servlet 技术,采用了 MVC 设计模式。 #### 三、Turbine 架构分析 - **核心组件**: - **Servlet Core**:处理 HTTP 请求的核心。 - **ToolBox**:包含...

    jdk-11.0.8.zip

    8. **改进的SSL/TLS**:JDK 11移除了对TLSv1.0和TLSv1.1的支持,强制使用更安全的TLSv1.2和TLSv1.3协议。 9. **JEP 320:移除过时的API**:为了保持平台的清洁,一些过时且不推荐使用的API在JDK 11中被彻底移除,...

    Java Documentation.zip

    Java Documentation.zip 文件包含的是Java开发工具包(JDK)1.3和1.4版本的官方API文档。这些文档对于Java开发者来说是极其重要的资源,它们详细解释了JDK中的类、接口、方法以及各种核心概念,帮助程序员理解和使用...

Global site tag (gtag.js) - Google Analytics