Kon*_*rus 10 java dynamic-proxy
如何让我的动态代理抛出检查异常?
我需要一个接口的透明包装器,有时会抛出检查过的异常,例如IOException.没有第三方AOP或编写我自己的代理是否可能?手动修改界面的所有20种方法也不是一种选择.
rva*_*nge 17
正如康拉德上面提到的那样,你可能正在寻找的是:
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
try {
Object value = method.invoke(delegate, args);
return value;
}
catch (InvocationTargetException ex) {
throw ex.getCause();
}
}
Run Code Online (Sandbox Code Playgroud)
资料来源:http://benpryor.com/blog/2006/08/15/java-dynamic-proxies-and-invocationtargetexception/
Tho*_*ung 11
您可以使用动态代理.只要已检查的异常是接口的一部分,您就可以从调用处理程序中抛出已检查的异常.否则这是非法的,并将创建一个UndeclaredThrowableException,它包装抛出的已检查异常.
interface A{
void x() throws IOException;
}
A proxy = (A) newProxyInstance(classLoader, new Class<?>[]{A.class},
new InvocationHandler() {
@Override
public Object invoke(Object arg0, Method arg1, Object[] arg2)
throws Throwable {
throw new IOException();
}
}
);
proxy.x();
Run Code Online (Sandbox Code Playgroud)
输出:
Exception in thread "main" java.io.IOException
at X$1.invoke(X.java:19)
at $Proxy0.x(Unknown Source)
at X.main(X.java:22)
Run Code Online (Sandbox Code Playgroud)
对于接口A,未声明的已检查异常:
interface A{
void x();
}
Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
at $Proxy0.x(Unknown Source)
at X.main(X.java:22)
Caused by: java.io.IOException
at X$1.invoke(X.java:19)
... 2 more
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7861 次 |
| 最近记录: |