我正在使用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();
答案 0 :(得分:1)
Cglib创建了Enhancer#setSuperclass
中给出的文章的子类。如果您继承A
,代理甚至不会知道B
的存在。也许你想创建一个懒惰的代理?然后,您可能希望查看LazyLoader
或Dispatcher
回调。
答案 1 :(得分:0)
也许您需要拦截构造函数并返回B的实例而不是调用A构造函数。