【问题标题】:Java inheritance hack using dynamic proxy使用动态代理的 Java 继承破解
【发布时间】:2014-10-24 23:03:34
【问题描述】:

我有两个接口

public interface A{
  public void sayHello();
}

public interface B extends A{
 }

我有 1 个实现接口 A 的类,比如说:

public class AImpl implements A{

public void sayHello(){
System.out.println("Hello");

}

}

现在我想使用 AImpl 为接口 B 实现一个动态代理对象。我可以这样做吗?

我用下面的代码试了一下

InvocationHandler handler = new MyInvocationHandler(<AImplInstance>);
       B b= (B) Proxy.newProxyInstance(
                A.class.getClassLoader(),
                new Class[]{A.class},
                handler);
        b.sayHello();

我的调用处理程序是:

public class MyInvocationHandler implements InvocationHandler{

    private A aImpl;


public MyInvocationHandler(A aImpl){
        this.aImpl= aImpl;
    }


    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        return method.invoke(aImpl, args);
    }
}

我在将代理实例类型转换为 B 实例时遇到类转换异常。

【问题讨论】:

    标签: java dynamic reflection aop interceptor


    【解决方案1】:

    您尚未将B 定义为代理的接口。将其添加到Class[]

    【讨论】:

      猜你喜欢
      • 2014-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多