【发布时间】:2014-08-13 03:04:01
【问题描述】:
这里我需要创建BImpl 的实例,但BImpl 需要通过接口A 访问功能。为此,该类实现了这个接口A。如何在运行时连接BImpl 的这些接口方法的委托?这个想法是BImpl 可以使用A 的方法。
在我的情况下,A 是已知的,AImpl 实例是在运行时创建的。
public static void main(String[] args) {
B b = (B) Enhancer.create(BImpl.class, new MyInterceptor());
System.out.println(b.cellValue());
}
interface A {
String value();
}
class AImpl implements A {
@Override
public String value() {
return "MyA";
}
}
interface B {
String cellValue();
}
abstract class BImpl implements B, A {
@Override
public String cellValue() {
return value() + "MyBCell";
}
}
class MyInterceptor implements MethodInterceptor {
@Override
public Object intercept(Object obj, Method method, Object[] args,
MethodProxy proxy) throws Throwable {
System.out.println(method.getName());
if ("value".equals(method.getName()))
return method.invoke(obj, args);
else
return proxy.invokeSuper(obj, args);
}
}
【问题讨论】:
标签: java java-bytecode-asm cglib