`
uag
  • 浏览: 19903 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于spring中aop实现机制中动态代理的一点理解

    博客分类:
  • J2EE
阅读更多
    学习了一段时间的Spring,关于AOP技术似懂非懂,今天花了一晚上的时间查阅了文档,google了很多相关文章,写一点自己的理解,以备忘和将来纠错。
    首先在Spring开发参考手册中描述是这样子的,Spring AOP部分使用JDK动态代理或者CGLIB来为目标对象创建代理。(建议优先使用JDK的动态代理)。如果被代理的目标对象实现了至少一个接口,则会使用JDK动态代理。所有该目标类型实现的接口都将被代理。 若该目标对象没有实现任何接口,则创建一个CGLIB代理。
    当使用CGLIB时,需要引入相应的jar包。
    那为什么Spring中优先建议使用JDK的动态代理呢?为什么要使用接口呢?第一个问题,
不知道为什么,我唯一能解释的是,如果面向接口编程更符合编程规范,多整体的扩展性也更好。这里贴下JDK和CGLIB的简单区别:
* JDK动态代理只能对实现了接口的类生成代理,而不能针对类。
* CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法。
  因为是继承,所以该类或方法最好不要声明成final。
    第二个问题,困扰了我一短时间,查阅了一些文章以后,总结如下:首先关于动态代理,
   public static Object newProxyInstance(ClassLoader loader,
                                         Class<?>[] interfaces, InvocationHandler h)
        throws IllegalArgumentException

接受的第二个参数是一组接口的列表,代理实例根据这个接口来创建代理对象,从而实现代理。 JDK动态代理的原理是根据定义好的规则,用传入的接口创建一个新类,这就是为什么采用动态代理时为什么只能用接口引用指向代理,而不能用传入的类引用执行动态类。
    在使用Spring中,如果将代理对象转换成一个借口的实现类,就会抛出异常
    java.lang.ClassCastException: $Proxy0 cannot be cast to...

     另外使用接口的设计,是面向接口编程的一种编程规范,有利于以后不同业务逻辑的扩展,使得开发更加有伸缩性。



分享到:
评论

相关推荐

    Spring AOP实现机制

    **Spring AOP 实现机制详解** Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许程序员在不修改源代码的...通过深入理解Spring AOP的实现机制,我们可以更好地利用这一强大的工具,优化我们的应用程序。

    springAOP配置动态代理实现

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

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

    Spring框架是Java中实现AOP的一个流行工具,它通过动态代理机制实现了这一功能。本文将深入探讨Spring AOP的实现原理,以及如何使用反射来实现动态代理模式。 首先,我们需要了解AOP的基本概念。AOP的核心思想是切...

    AOP动态代理(反射机制)

    AOP(Aspect Oriented Programming,面向切面编程)是一种编程范式,旨在提供一种方法来组织和模块化系统中的...通过阅读《AOP动态代理(反射机制)》这本书,你可以深入理解这些概念,并通过丰富的示例掌握其实现方法。

    spring_aop之JDK的动态代理

    本文将深入探讨Spring AOP中的JDK动态代理机制。 首先,我们要理解什么是动态代理。动态代理是在运行时创建一个实现了一组给定接口的代理类,这个代理类可以拦截并处理方法调用,从而实现一些额外的功能。JDK的动态...

    Java动态代理(Spring Aop原理)

    动态代理提供了创建代理对象的机制,而Spring AOP则是基于动态代理实现的面向切面编程框架,简化了在多处插入相同逻辑的复杂度。在实际开发中,理解并熟练运用这两个技术对于提高代码质量和可维护性至关重要。

    初探spring aop内部实现 java

    在实际开发中,理解Spring AOP的内部机制有助于我们更好地利用其功能,提高代码的可维护性和扩展性。而DataSource的灵活配置和FactoryBean模式则可以帮助我们实现更高效、可扩展的数据访问层。通过阅读和分析源代码...

    Spring实现AOP的4种方式

    总的来说,理解并熟练运用Spring的AOP机制,能够极大地提高代码的可维护性和复用性,是每个Spring开发者必备的技能。通过学习和实践,我们可以灵活地应用这四种方式,提升我们的软件开发效率和质量。

    Spring.net Aop 例子

    通过这个例子,你可以学习到如何在Spring.NET环境中实现AOP,理解动态代理的工作原理,并掌握如何在实际项目中应用AOP来提高代码的灵活性和可维护性。这将有助于你编写更加模块化、易于维护的软件系统。

    从JDK动态代理看Spring之AOP实现

    本文将深入探讨Spring是如何通过JDK的动态代理来实现AOP的。 首先,我们要理解JDK动态代理的基本原理。在Java中,动态代理主要由`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口组成。...

    理解Spring AOP实现与思想 案例代码

    - **代理模式**:Spring AOP使用两种代理方式,JDK动态代理和CGLIB代理。如果目标类实现了接口,Spring会使用JDK动态代理;如果没有实现接口,Spring会使用CGLIB代理生成子类。 - **JDK动态代理**:基于接口的代理...

    设计模式之动态代理与spring的aop编程

    动态代理和Spring AOP(面向切面编程)是两个关键的设计概念,它们在实现高效、模块化的系统中起着至关重要的作用。本文将深入探讨这两个概念,并结合实际应用进行解析。 首先,让我们理解什么是动态代理。动态代理...

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

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

    SpringAOP的实现机制(底层原理)、应用场景等详解,模拟过程的实例

    这两种代理方式在Spring AOP中起到关键作用,用于实现横切关注点的切面编程。通过学习它们的原理和实际应用,您将能够更好地理解和利用Spring AOP来提高您的应用程序的可维护性和可扩展性。 内容亮点: JDK动态...

    通过动态代理模拟Spring AOP

    总的来说,通过Java的动态代理模拟Spring AOP可以帮助我们理解AOP的基本原理,并在实际项目中实现一些简单的切面逻辑。然而,对于更复杂的需求,如跨越多个方法的事务管理,Spring AOP提供了更全面的解决方案。熟悉...

    模拟spring aop【一】基于jdk动态代理实现的aop

    在Java中,动态代理机制允许我们在运行时创建一个实现了特定接口的新类。这个新类的实例可以代理目标对象,执行额外的操作,如方法调用前后的增强。Spring AOP利用这一特性来实现切面的织入,即在目标方法执行前、后...

    使用代理实现简易的spring aop功能

    在这个例子中,我们将探讨如何使用动态代理来实现一个简单的Spring AOP功能。 动态代理是Java提供的一种机制,它允许我们在运行时创建对象的代理,该对象可以代表原对象执行额外的操作。在Spring AOP中,有两种主要...

    Spring实现AOP的4种方式 - Java -

    Spring默认使用JDK的动态代理机制实现AOP。当目标对象实现了至少一个接口时,Spring会创建该接口的代理对象。在代理对象上调用方法时,会触发切点匹配并执行相应的通知。动态代理的实现依赖于Java的`java.lang....

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

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

    spring-aop.jar

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

Global site tag (gtag.js) - Google Analytics