`
johnnylzb
  • 浏览: 12796 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类

关于Hibernate加载数据时的CGLIB动态代理的奇怪问题。

阅读更多

有三个类,分别对应三个表ComAuthPermissionDO、ComAuthOperationDO、ComAuthEntityDO

三个表的关系是:ComAuthPermissionDO分别引用了ComAuthOperationDO、ComAuthEntityDO,即分别跟这两个表形成@ManyToOne关系。

在查询ComAuthPermissionDO,可以联级查到ComAuthOperationDO、ComAuthEntityDO,但非常奇怪,我查出来之后,发现ComAuthOperationDO的equals()方法总是返回false,最后发现,是equals方法在对比两个类的Class时候返回false。于是打印了联级查询的这两个实例的Class:

=============.>>CLass:  com.xx.component.authorization.model.ComAuthOperationDO$$EnhancerByCGLIB$$86a21bfb
=============.>>CLass:  com.xx.component.authorization.model.ComAuthEntityDO

为什么Hibernate加载ComAuthOperationDO实例时用来CGLIB动态代理,而加载ComAuthEntityDO时却正常呢?

请解答。。。谢谢!

分享到:
评论
3 楼 antonyup_2006 2007-10-25  
动态代理机制常用有有两种技术:
一个是cglib (class)
还有一个是java dynamic proxy(interface)

你的ComAuthEntityDO是否实现了interface?
2 楼 johnnylzb 2007-09-29  
pikachu 写道
一般来说,需要lazy的就会被cglib,
不需要lazy的就用原来的。
转新手!
谢谢,但相当奇怪,我查看过Annotation,两个类都设置为LAZY,但为什么ComAuthEntityDO没有使用CGLIB呢?
1 楼 pikachu 2007-09-29  
一般来说,需要lazy的就会被cglib,
不需要lazy的就用原来的。
转新手!

相关推荐

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

    Java中的动态代理是一种重要的设计模式...总结来说,JDK动态代理和CGLIB动态代理都是为了在运行时提供对目标对象的增强,它们通过不同的实现方式提供了扩展功能的可能性,开发者可以根据项目需求和场景选择合适的技术。

    Spring框架中JDK动态代理和cglib动态代理

    Spring 框架中 JDK 动态代理和 CGLIB 动态代理是 Spring AOP 中一个非常重要的知识点。Spring AOP 框架会根据实际情况选择使用 JDK 的动态代理还是 CGLIB 的动态代理。 JDK 动态代理是 Java 自带的动态代理机制,它...

    cglib动态代理介绍

    CGlib则是Java动态代理的一种实现方式,尤其是在不提供接口的情况下,它通过生成目标类的子类来实现动态代理。 在Java中,JDK自带的动态代理机制是基于接口的,如果被代理的类没有实现任何接口,那么就无法使用JDK...

    AOP之JDK动态代理和CGLib动态代理

    CGLib的优点是它可以代理任何类,无需目标对象实现接口,但相比JDK动态代理,它的运行效率较低,且由于生成了子类,可能会引起类加载和内存占用的问题。 **Spring AOP的应用**: 在Spring框架中,AOP主要用于日志...

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

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

    cglib动态代理jar包

    CGlib动态代理是Java开发中一个非常重要的工具库,它主要用来实现代理模式,尤其在面向切面编程(AOP)中发挥着关键作用。CGlib是一个强大的高性能的代码生成库,它可以在运行期扩展Java类与实现Java接口。CGlib并不...

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

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

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

    当JDK动态代理无法满足需求,例如代理的目标类没有实现接口时,CGLIB就能派上用场。CGLIB是一个强大的高性能的代码生成库,它可以在运行期扩展Java类与实现Java接口。CGLIB通过生成子类并在子类的方法上织入增强代码...

    Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理)

    Java 动态代理是 Java 编程语言中的一种强大工具,广泛应用于 Spring AOP、Hibernate 数据查询、测试框架的后端 mock、RPC 远程调用、Java 注解对象获取、日志、用户鉴权、全局性异常处理、性能监控等领域。...

    CGlib动态代理类的jar包

    这个库广泛应用于许多框架和工具中,如Spring AOP、Hibernate等,主要用于实现动态代理、类增强等功能。CGlib通过ASM库来操作和生成字节码,提供对Java类的底层访问。 在Java编程中,动态代理是一种在运行时创建...

    转载:cglib动态代理介绍(一)

    CGlib是通过在运行时生成字节码来实现动态代理的。它不是直接对Java字节码进行操作,而是基于ASM库,ASM是一个底层的Java字节码操控和分析框架。 ### 动态代理原理 动态代理是一种编程技术,允许在运行时创建一个...

    基于MAVEN项目的CGLib动态代理原理及实现

    在Java编程领域,动态代理是一种常见的设计模式,它允许我们在运行时创建代理对象来扩展或增强已有对象的功能。本文将深入探讨如何在基于Maven的项目中利用CGLib库实现动态代理。CGLib(Code Generation Library)是...

    cglib动态代理用到的两个包

    当无法或者不想使用Java标准的JDK动态代理(只能代理接口实现类)时,CGLib可以生成目标类的子类来实现对目标对象的代理。这个过程中,CGLib的核心类`Enhancer`起到了关键作用。`Enhancer`允许开发者指定被代理的...

    CGlib实现动态代理(承接上面JDK实现动态代理)

    CGlib动态代理的工作原理是通过继承被代理的目标类来创建子类,然后在子类中覆盖父类的方法,当调用这些方法时,会插入自定义的逻辑。与JDK的动态代理不同,JDK代理基于接口,如果目标类没有实现接口,就无法使用JDK...

    JDK动态代理和CGLIB代理

    Java动态代理是Java编程中一个重要的特性,它允许我们在运行时创建对象的代理,从而实现对原对象的一些额外操作或扩展功能。JDK动态代理和CGLIB代理是两种常用的实现方式。 首先,我们来看看JDK动态代理。JDK动态...

    jdk和cglib动态代理的例子{jar包+源码}

    jdk和cglib动态代理的例子{jar包+源码} 解压:如有问题 用快压

    Hibernate底层技术简介 CGLIB

    总的来说,CGLIB在Hibernate中扮演着核心角色,它简化了动态生成和增强类的过程,提供了高效的反射和代理机制,以及灵活的数据结构处理能力,这些都是Hibernate实现其强大功能的基础。理解和掌握CGLIB的使用,对于...

    动态代理和cglib例子

    动态代理和CGLIB在Java开发中扮演着重要的角色,特别是在实现面向切面编程(AOP)和增强对象功能方面。动态代理允许我们在不修改原始代码的情况下,为已有对象添加额外的功能,比如日志记录、性能监控等。而CGLIB...

    cglib动态代理

    CGLib动态代理是一种在Java编程中实现动态代理的技术,它主要通过字节码操作库ASM来生成目标类的子类,从而实现对目标类的方法拦截和增强。在Java中,当我们需要在运行时动态地创建对象并扩展其功能时,CGLib是一个...

    cglib动态代理相关包

    CGlib动态代理基于ASM库来操作Java字节码,当目标对象没有实现接口时,CGlib可以创建目标对象的子类,并在子类中拦截方法调用。它通过生成的子类重写父类的方法,在被重写的方法内部添加额外的处理逻辑,如日志记录...

Global site tag (gtag.js) - Google Analytics