spring默认用什么代理

worktile 其他 247

回复

共3条回复 我来回复
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    在Spring框架中,默认使用的是JDK动态代理。

    在Spring中,代理是一种设计模式,它允许一个对象(被代理对象)被其它对象(代理对象)所控制和代表。代理对象将对被代理对象的访问进行拦截,并允许在进行方法调用之前和之后执行一些附加的操作。

    在Java中,有两种类型的代理:静态代理和动态代理。静态代理需要代理类手动编写,并且每个被代理的类都需要对应一个代理类。而动态代理则是在运行时动态地创建代理类,不需要手动编写代理类。

    Spring框架通过使用JDK动态代理来实现代理功能。JDK动态代理是Java提供的一种代理方式,它基于接口进行代理,即被代理对象必须实现一个接口。JDK动态代理通过在运行时动态生成的代理类,在代理类中实现接口方法的增强逻辑,并将代理类实例化后返回给调用方。

    在Spring中,如果一个Bean实现了接口,而且配置了代理模式为默认的"proxy-target-class=false",则Spring会使用JDK动态代理来代理该Bean。这种代理方式可以非常方便地使用Spring AOP实现切面编程,并且在运行时生成的代理类性能较高。

    另外,如果一个Bean没有实现接口,而且配置了代理模式为"proxy-target-class=true",则Spring会自动使用CGLIB代理来代理该Bean。CGLIB是一个强大的第三方库,可以在运行时动态地生成子类来扩展被代理类的功能。CGLIB代理不要求被代理类实现了任何接口,因此可以对普通的Java类进行代理。但是相比于JDK动态代理,CGLIB代理会稍微增加一些性能开销。

    总结来说,Spring默认使用的是JDK动态代理,但如果被代理的类没有实现接口,或者明确指定了使用CGLIB代理,则会使用CGLIB代理。

    1年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Spring框架默认使用的是JDK动态代理来实现代理功能。JDK动态代理是Java中提供的一种代理机制,它基于Java的反射机制,可以在运行时动态地创建代理对象和代理方法。

    以下是关于Spring默认使用JDK动态代理的五个要点:

    1. 代理对象接口:JDK动态代理要求代理的目标对象必须实现一个或多个接口。代理对象会实现这些接口,并将目标对象的方法调用委托给实际的目标对象。

    2. 代理类生成:JDK动态代理通过在运行时生成代理类的字节码来实现代理功能。生成的代理类是目标对象实现接口的子类,可以通过反射机制进行访问。代理类的生成过程由Java的Proxy类完成。

    3. 代理对象的调用处理:JDK动态代理通过实现InvocationHandler接口来提供代理对象的调用处理逻辑。当代理对象的方法被调用时,调用处理器会拦截方法调用,执行预定义的逻辑,并最终将方法调用委托给目标对象。

    4. 代理对象的创建:Spring框架通过AOP代理工厂在运行时创建代理对象。AOP工厂根据目标对象和相应的切面,使用JDK动态代理来生成代理对象。生成的代理对象被存储在Spring的应用上下文中,供后续使用。

    5. 代理对象的性能:相比于CGLIB代理(Spring还支持CGLIB代理),JDK动态代理的性能较差。因为JDK动态代理是基于接口的,所以只能代理接口的方法。而CGLIB代理可以直接代理目标对象的所有非final方法,性能更好。然而,JDK动态代理在功能上更加灵活,因为它能够代理多个接口,而CGLIB代理只能代理具体的类。

    总结来说,Spring框架默认使用JDK动态代理来实现代理功能。JDK动态代理要求代理的目标对象实现接口,并通过在运行时动态生成代理类和调用处理器来提供代理功能。虽然JDK动态代理的性能较差,但它具有更好的灵活性,可以代理多个接口。

    1年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    在Spring中,默认使用的是基于JDK动态代理的代理方式。

    Spring框架中的AOP(Aspect-Oriented Programming,面向切面编程)功能依赖于代理模式来实现。代理模式是在调用一个对象的方法时,引入另一个对象来增强或控制对象的行为。

    Spring的代理模式主要有两种实现方式:JDK动态代理和CGLIB动态代理。在配置AOP时,Spring默认使用的是基于JDK动态代理的方式。

    JDK动态代理是由Java JDK提供的一种代理实现方式,基于接口实现。通过使用Java的反射机制,在运行时动态生成代理类,然后将被代理的接口方法调用交给代理类来处理。JDK动态代理要求目标对象必须实现一个或多个接口,代理类实现了被代理对象的接口,并在代理类的方法中调用目标对象的方法。

    使用JDK动态代理代理对象的步骤如下:

    1. 定义一个接口,该接口是目标对象实现的接口。
    2. 实现InvocationHandler接口,创建一个代理类来实现接口方法。这个代理类中的方法会在目标对象的方法调用前后做一些额外的处理。
    3. 在代理类中使用反射机制创建目标对象的代理实例。

    在Spring中配置AOP时,如果目标对象实现了接口,则Spring会使用JDK动态代理来生成代理对象。如果目标对象没有实现接口,则Spring会使用CGLIB动态代理来生成代理对象。

    需要注意的是,JDK动态代理只能代理接口,而无法代理类。如果目标对象没有实现任何接口,或者需要代理的方法为final方法,可以考虑使用CGLIB动态代理。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部