0

我正在使用 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();
4

2 回答 2

1

Cglib 创建Enhancer#setSuperclass. 如果子类A化,代理甚至不知道B. 也许您想创建一个惰性代理?然后你可能想看看LazyLoaderorDispatcher回调。

于 2013-12-01T12:30:44.547 回答
0

也许您需要拦截构造函数并返回 B 的实例,而不是调用 A 构造函数。

于 2013-10-22T07:20:55.933 回答