gpt4 book ai didi

hibernate - 如何使用 cglib 双重增强一个类?

转载 作者:行者123 更新时间:2023-12-02 10:20:40 29 4
gpt4 key购买 nike

代码如下:

    Patient patient = factory.createPatient();           

Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(patient.getClass());
enhancer.setCallback(new DefaultMethodInterceptor(patient));
patient = (Patient) enhancer.create();

assertThat(patient.getFirstName()).isNotNull();


Enhancer enhancer2 = new Enhancer();
enhancer2.setSuperclass(patient.getClass());
enhancer2.setCallback(new DefaultMethodInterceptor(patient));
patient = (Patient) enhancer2.create();

assertThat(patient.getFirstName()).isNotNull();

最后一个断言失败了

net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
...
Caused by: java.lang.reflect.InvocationTargetException
...
Caused by: java.lang.ClassFormatError: Duplicate method name&signature in class file my/package/entity/Patient$$EnhancerByCGLIB$$ca1e6685$$EnhancerByCGLIB$$f52743be

我问这个是因为我想增强 Hibernate 的实体,但有时它会自行返回已经增强的实体,而我的第二次增强会失败。我怎样才能避免这种情况?

最佳答案

您需要通过 Enhancer.isEnhanced() 方法检查您的类是否已被增强。

如果是,您的第二个增强功能应该应用于原始类,而不是像上面代码中那样应用于已经增强的版本。您仍然可以在 MethodInterceptor.intercept() 实现中复合增强功能,但必须小心行事。

关于hibernate - 如何使用 cglib 双重增强一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1277771/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com