让我们考虑一下我有一些具有B类属性的A类。
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运行空构造函数?
答案 0 :(得分:6)
我没有看到关于如何使用ClassA
类包装CGLibProxy
的任何代码示例,但如果您直接处理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());
}
}