`

Spring中AOP的两种代理方式

阅读更多

         第一种代理即Java的动态代理方式上一篇已经分析,在这里不再介绍,现在我们先来了解下GCLIB代理是什么?它又是怎样实现的?和Java动态代理有什么区别?

         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之间转换

 


            如何强制使用CGLIB实现AOP?


            * 添加CGLIB库,SPRING_HOME/cglib/*.jar
            * 在spring配置文件中加入<aop:aspectj-autoproxy proxy-target-class="true"/>

 

            JDK动态代理和CGLIB字节码生成的区别?


            * JDK动态代理只能对实现了接口的类生成代理,而不能针对类。
            * CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法, 因为是继承,所以该类或方法最好不要声明成final 。

            Java动态代理和CGLIB代理在其他方面没什么区别,只有在Spring配置文件中配置的区别:

 

            <bean id="#" class="org.springframework.ProxyFactoryBean">

                       <property name="proxyTargetClass">

                                       <value>true</value>

                       </property>

             </bean>

***************************************************

 

             <bean id="#" class="org.springframework.ProxyFactoryBean">

                        <property name="proxyInterfaces">

                                        <value>com.gc.impl.TimeBookInterface</value>

                        </property>

              </bean>

分享到:
评论

相关推荐

    死磕Spring之AOP篇 - Spring AOP两种代理对象的拦截处理(csdn)————程序.pdf

    在 Spring 中,AOP 的实现主要依赖于代理模式,有两种代理方式:JDK 动态代理和 CGLIB 动态代理。 JDK 动态代理是基于接口的,它要求被代理的目标对象必须实现至少一个接口。Spring 使用 `java.lang.reflect.Proxy`...

    spring之AOP(动态代理)

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

    Spring实现AOP的4种方式

    Spring的AOP支持两种代理类型:JDK动态代理和CGLIB代理。JDK动态代理适用于实现了接口的目标对象,它会为这些对象创建一个实现了相同接口的代理对象。而CGLIB代理则是在运行时为目标类生成一个子类,如果目标类没有...

    springAop默认代理方式.zip

    1. **静态代理**:Spring AOP 提供了两种代理方式,一种是静态代理,另一种是动态代理。静态代理是在编译时就确定了代理类,这种代理方式通常通过实现相同接口的方式创建。然而,Spring AOP默认并不使用静态代理,...

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

    Spring框架中的AOP模块使用了动态代理来实现AOP概念。Spring AOP允许开发者定义切面,并在这些切面中指定拦截的方法。Spring AOP支持不同的代理策略,包括JDK动态代理和CGLIB代理。如果被代理的类没有实现接口,...

    Spring.net Aop 例子

    这两种代理都实现了.NET的`System.Linq.Expressions.Expression` API,使得Spring.NET可以在运行时构建和执行代理逻辑。 1. **基于接口的代理(InterfaceProxy)**:适用于目标对象实现了一个或多个接口的情况。...

    Spring AOP 16道面试题及答案.docx

    Spring提供了两种代理方式:JDK动态代理和CGLIB代理。JDK代理适用于那些实现了接口的类,而CGLIB代理则适用于没有实现接口的类。 引介(Introduction)是Spring AOP的一个特性,允许在通知对象中声明并实现它们原本...

    spring-aop.jar

    1. **AOP代理**:Spring AOP支持两种代理方式,即JDK动态代理和CGLIB代理。JDK代理用于实现接口的类,而CGLIB代理则用于未实现接口的类。spring-aop.jar包含了这些代理机制的相关类,如`org.springframework.aop....

    springAOP配置动态代理实现

    综上所述,通过理解Spring AOP的配置和动态代理机制,我们可以灵活地在项目中添加横切关注点,提升代码的模块化和可维护性。在实际开发中,结合使用XML配置、注解配置以及适当的动态代理策略,可以使AOP功能更好地...

    Spring_AOP_学习小结 Spring_AOP_学习小结 Spring_AOP_学习小结

    Spring AOP通过两种代理机制实现: 1. JDK动态代理:只能代理实现了接口的目标对象,性能相对较低,需要指定代理接口。 2. CGLIB代理:可代理接口和非final的类,性能较高,通过生成字节码实现。 四、Spring AOP...

    spring-aop实例

    有两种代理类型:JDK动态代理和CGLIB代理。JDK代理用于实现了接口的目标对象,而CGLIB代理则用于没有接口的类。 6. **引入(Introduction)**:Spring AOP允许在现有类中添加新的方法或属性,这称为类型引入。这...

    以注解方式模拟Spring IoC AOP

    Spring提供了两种主要的AOP实现方式:基于代理(Proxy-based)和基于注解(Annotation-based)。 - **基于代理的AOP**:Spring使用JDK动态代理或CGLIB动态代理创建目标对象的代理,代理对象在调用目标方法前后执行...

    简单spring aop 例子

    在Spring AOP中,切面主要通过两种方式实现:代理(Proxies)和织入(Weaving)。 1. **代理**:Spring AOP支持两种类型的代理:JDK动态代理和CGLIB代理。JDK代理用于实现了接口的类,而CGLIB代理则用于没有接口或...

    研究下Spring中AOP的实现?

    Spring AOP有两种实现方式:代理模式和注解驱动。代理模式分为JDK动态代理和CGLIB代理。JDK动态代理适用于实现了接口的目标对象,它通过实现InvocationHandler接口创建代理对象。而CGLIB代理则是在运行时为类生成...

    SpringAop两种配置demo

    Spring AOP,全称Spring面向切面编程,是Spring框架中的一个重要组成部分,它提供了一种在不修改原有代码的情况下,对...了解并熟练掌握这两种配置方式,能够帮助我们更好地利用Spring AOP提高代码的可维护性和复用性。

    代理设计模式:静态代理和动态代理的理解、实现与区别(优缺点)与SpringAOP的3种配置方式案例工程代码

    本资源主要涵盖了静态代理和动态代理两种常见类型的代理模式,以及Spring AOP中动态代理的三种配置方式。以下是详细的知识点解析: ### 静态代理 静态代理是程序员手动创建代理类并实现相同接口的方式。代理类和...

    spring_aop_cglib的实现方式

    代理可以分为两种类型:基于接口的JDK动态代理和基于类的CGLIB代理。JDK动态代理要求目标对象实现至少一个接口,而CGLIB则不需要这个限制,它通过继承目标类来创建代理对象。 要使用CGLIB,我们并不需要单独引入...

    解释Spring中的Aop代理

    Spring支持两种类型的AOP代理:JDK动态代理和CGLIB代理。 - JDK动态代理:基于Java反射API实现,适用于接口代理。如果目标对象实现了至少一个接口,Spring会使用JDK动态代理创建一个代理对象,该代理对象在调用...

    五、Spring源码分析——Spring Aop

    Spring AOP分为两种代理方式:JDK动态代理和CGLIB代理。JDK动态代理基于接口实现,如果目标类实现了接口,Spring会选择JDK动态代理;如果没有实现接口,Spring则会使用CGLIB代理,通过字节码技术创建一个目标类的...

Global site tag (gtag.js) - Google Analytics