2013-04-10 131 views
0

我使用CGLIB來提高A級CGLIB - 控制實例創建

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

我有延伸的A級

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

我怎麼能告訴CGLIB實例B的,而不是B類當我加強它時?

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(); 

回答

1

Cglib創建了Enhancer#setSuperclass中給出的結構的子類。如果您繼承了A,代理甚至不知道B的存在。也許你想創建一個懶惰的代理?那麼你可能想看看LazyLoaderDispatcher回調。

0

也許你需要攔截構造函數並返回B的一個實例,而不是調用A構造函數。