CGLib - 控制实例创建

时间:2013-04-10 14:38:45

标签: java cglib

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

2 个答案:

答案 0 :(得分:1)

Cglib创建了Enhancer#setSuperclass中给出的文章的子类。如果您继承A,代理甚至不会知道B的存在。也许你想创建一个懒惰的代理?然后,您可能希望查看LazyLoaderDispatcher回调。

答案 1 :(得分:0)

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