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

AOP代理类(AOP Proxy) 分为jdk动态代理和cglib代理,两个代理方式的原理

阅读更多

分类

JDK代理类:        目标类 和 代理类实现相同的的接口

CGLIB代理类       代理类 是 目标类的子类,依赖CGLIB.JAR

 

 

JDK的动态代理主要涉及到java.lang.reflect包中的两个类:Proxy和InvocationHandler。其中InvocationHandler是一个接口,可以通过实现该接口定义横切逻辑,在并通过反射机制调用目标类的代码,动态将横切逻辑和业务逻辑编织在一起。
   而Proxy为InvocationHandler实现类动态创建一个符合某一接口的代理实例。

cglib(Code Generation Library)是一个强大的,高性能,高质量的Code生成类库。它可以在运行期扩展Java类与实现Java接口。
cglib封装了asm,可以在运行期动态生成新的class。
cglib用于AOP,jdk中的proxy必须基于接口,cglib却没有这个限制。

原理区别:

java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。

1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP
2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP
3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换

分享到:
评论

相关推荐

    浅谈JDK动态代理与CGLIB代理去区别

    在Java开发中,动态代理和CGLIB代理是两种常见的面向切面编程(AOP)实现方式,它们都用于在不修改原有代码的情况下,增强或扩展对象的功能。本篇文章将深入探讨JDK动态代理和CGLIB代理的区别,以及它们在实际应用中...

    Jdk动态代理和cglib动态代理原理

    动态代理主要分为两种技术:JDK动态代理和CGLIB动态代理。 ### JDK动态代理 JDK动态代理是Java内置的一种机制,依赖于`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。以下是JDK动态...

    JDK动态代理 spring aop 的原理

    现在让我们深入探讨JDK动态代理和Spring AOP的原理。 首先,JDK动态代理基于Java的反射机制,通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现。Proxy类用于创建一个代理对象,...

    spring之AOP(动态代理)

    在Spring中,AOP主要通过两种动态代理技术实现:JDK动态代理和CGLIB动态代理。 首先,让我们详细了解一下JDK动态代理。JDK动态代理基于Java的接口实现,它适用于目标对象实现了至少一个接口的情况。在运行时,JDK...

    反射实现 AOP 动态代理模式(Spring AOP 的实现原理)

    例如,通过使用java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口,我们可以在运行时创建一个代理对象。代理对象在调用方法时会触发InvocationHandler的invoke()方法,从而可以在这个方法中实现...

    jdk与cglib动态代理与底层实现

    JDK和CGLIB是Java中实现动态代理的两种主要方式,它们在Spring框架中扮演着关键角色,尤其是在AOP(面向切面编程)中。 1. **JDK动态代理**: JDK动态代理基于Java的接口机制实现,因此,要使用JDK动态代理,被...

    JDK动态代理和Cglib动态代理实例源码

    在`DynamicProxyTest`源码中,我们可以看到这两个代理方式的实现。测试代码通常会包含以下部分: - 创建代理对象:根据选择的代理方式(JDK或Cglib),调用相应的生成代理对象的方法。 - 定义目标方法:定义被代理类...

    jdk与cglib动态度代理的区别原理

    1. **原理**:JDK动态代理通过`Proxy.newProxyInstance()`方法创建代理对象,该方法接受三个参数:一个类加载器、一个接口数组和一个`InvocationHandler`实例。类加载器用于生成代理类,接口数组定义了代理对象需要...

    Spring-AOP-JDK动态代理

    JDK动态代理是Java提供的一种创建代理对象的方式,它在运行时根据接口生成一个实现了这些接口的代理类。Spring AOP可以利用JDK动态代理来实现对方法的拦截,当调用目标对象的方法时,实际上执行的是代理对象的方法,...

    代理模式-静态动态代理-jdk动态代理-cglib动态代理

    在Java中,代理模式有多种实现方式,包括静态代理、JDK动态代理和CGLIB动态代理。 **静态代理** 静态代理是最早也是最基础的代理实现方式。在静态代理中,我们需要创建一个代理类,这个代理类与原始类(被代理类)...

    jdk动态代理 cglib3.0动态代理

    本文将深入探讨这两个库以及它们的工作原理。 **JDK动态代理** JDK动态代理基于Java反射API实现,它提供了`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。`Proxy`类用于创建动态代理...

    java 动态代理实例(JDK代理与CGLIB代理)

    在附件的"demo"中,可能包含了这两个代理方式的示例代码,包括如何创建和使用代理对象,以及如何在`InvocationHandler`或`MethodInterceptor`中添加自定义逻辑。通过阅读和理解这些代码,你可以更深入地了解Java动态...

    java动态代理(JDK和cglib).pdf

    动态代理主要分为两种实现方式:JDK动态代理和CGLIB动态代理。 1. JDK动态代理: JDK动态代理基于Java的反射API,它要求被代理的目标对象必须实现一个或多个接口。JDK动态代理的核心类是`java.lang.reflect.Proxy`...

    JDK和CGlib分别实现的动态代理源代码

    JDK和CGlib是两种常用的动态代理实现方式,它们各自有不同的特性和使用场景。 首先,我们来详细了解一下JDK动态代理。JDK动态代理基于接口实现,它要求被代理的对象必须实现至少一个接口。通过`java.lang.reflect....

    cglib aop spring 动态代理

    jdk动态代理--适合企业级开发,但是它要求必须面向接口编程,假如目标类没有实现接口,则没办法代理这个类。 cglib代理, 1.cglib(Code Generation Library)是一个强大的,高性能,高质量的Code生成类库。它可以在...

    JAVA动态代理实现Demo(JDK动态代理和CGLIB动态代理)

    Java提供了两种主要的动态代理实现方式:JDK动态代理和CGLIB动态代理。 **JDK动态代理**: JDK动态代理基于接口实现,也就是说,被代理的对象必须实现至少一个接口。代理机制的核心是`java.lang.reflect.Proxy`类和...

    Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)

    JDK的动态代理主要依赖于`java.lang.reflect.Proxy`和`java.lang.reflect.InvocationHandler`两个类。Proxy类用于创建动态代理对象,而InvocationHandler接口则定义了对代理对象方法调用的处理逻辑。使用JDK动态代理...

    使用cglib演示动态代理时用到的jar包 aop 动态代理

    动态代理有两种主要实现方式:JDK动态代理和CGLIB动态代理。JDK动态代理基于接口,如果目标类实现了至少一个接口,就可以使用JDK的java.lang.reflect.Proxy类来创建代理对象。然而,如果目标类没有实现任何接口,...

    Jdk动态代理,cglib动态代理,反射和拦截器(链)示例

    Java标准库中的`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口是实现JDK动态代理的基础。动态代理主要用于创建一个代理对象,这个代理对象可以代替原始目标对象执行方法,并在调用前后...

    使用JDK中的Proxy技术实现AOP功能与使用CGLIB实现AOP功能

    本篇将深入探讨如何使用JDK的动态代理和CGLIB库来实现Spring中的AOP功能。 首先,我们来看JDK中的Proxy技术。JDK Proxy是Java提供的一种动态代理机制,它允许我们在运行时创建一个实现了特定接口的新类。这个新类...

Global site tag (gtag.js) - Google Analytics