2012-10-14 57 views
0

讓我們考慮一下,我有一些A類具有B類的屬性CGLIB代理,沒有空的構造

public class ClassA{ 

private ClassB classB; 

public ClassA(ClassB classB){ 
this.classB = classB; 
} 

//some methods ommitted. 
} 

人無我有CGLIB代理:

public class CGLibProxy implements MethodInterceptor{ 

    @Override 
    public Object intercept(Object object, Method method, Object[] args, 
      MethodProxy methodProxy) throws Throwable { 

    if (method.getName().startsWith("print")){ 
     System.out.println("We will not run any method started with print"); 
     return null; 
    } 
     else 
     return methodProxy.invokeSuper(object, args); 
    } 
} 

現在,當我使用CGLib對於ClassA,代理創建ClassA實例。

我的問題是如何將classB參數傳遞給此代理,因爲據我所知CGLib將運行ClassA的空構造函數?

回答

4

我看不出你如何與CGLibProxy類包裝ClassA任何代碼示例,但如果你正在處理CGLIB直接,那麼你應該在這種情況下,有net.sf.cglib.proxy.Enhancer一個實例可以提供構造ARGS如下。

import net.sf.cglib.proxy.Enhancer; 

public class CGLibProxyMain { 

    public static void main(String[] args) { 
     Enhancer enhancer = new Enhancer(); 
     enhancer.setSuperclass(ClassA.class); 
     enhancer.setCallback(new CGLibProxy()); 
     ClassA a = (ClassA) enhancer.create(new Class[] {ClassB.class}, new Object[] {new ClassB()}); 
     System.out.println(a.printB());; 
     System.out.println(a.otherMethod()); 
    } 
} 
相關問題