gpt4 book ai didi

java - CGLib - 控制实例创建

转载 作者:行者123 更新时间:2023-12-01 14:41:15 27 4
gpt4 key购买 nike

我正在使用 CGLib 来增强 A 类。

public class A { 
public void printName(){
System.out.println("guy");
}
}

我有 B 类,它扩展了 A 类。

public class B extends A{ 
public void printName(){
System.out.println("someone else!");
}
}

当我增强它时,如何告诉 CGLib 实例化 B 而不是 A?

public A getEnhancedClass( boolean trueIfIWantBInsteadOfA ){
e.setSuperclass( A.class ); // cannot change this
e.setCallback( createDummyInterceptor() );// an interceptor that just invokesSuper
/// ... missing code here
return (A) e.create()
}

下面的代码应该打印“别人!”

getEnhancedClass( true ).printName();

最佳答案

Cglib 创建 Enhancer#setSuperclass 中给出的 arument 的子类。如果您子类化A,代理甚至不知道B的存在。也许您想创建一个惰性代理?然后您可能想查看 LazyLoaderDispatcher 回调。

关于java - CGLib - 控制实例创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15928921/

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