Java中如何使用动态代理来捕获异常?

我有一个接口:publicinterfaceMyInterface{voidvoidMethod();StringobjectMethod();intintMethod(... 我有一个接口:
public interface MyInterface {
void voidMethod();
String objectMethod();
int intMethod(Object obj);
}
并实现了它,现在想捕获异常,实现下面的效果:
public class Wraper implements MyInterface{
private MyInterface myInterface;
public Wraper(MyInterface myInterface){
this.myInterface=myInterface;
}
@Override
public void voidMethod() {
try{
myInterface.voidMethod();
}catch(RuntimeException e){
e.printStackTrace();
}
}

@Override
public String objectMethod() {
try{
return myInterface.objectMethod();
}catch (RuntimeException e){
e.getStackTrace();
return null;
}
}

@Override
public int intMethod(Object obj) {
try{
return intMethod(obj);
}catch (RuntimeException e){
e.getStackTrace();
return 0;
}
}
}
有什么办法自动生成下面的Wraper,动态代理,静态代码都可以.
主要是不想那么多类都一个个写Wraper,应该有比较成熟的解决方案吧
展开
 我来答
jamxval
推荐于2016-08-14 · TA获得超过6822个赞
知道大有可为答主
回答量:4308
采纳率:82%
帮助的人:1429万
展开全部
你需要 AOP 技术,比如 Spring AOP 或 JBoss AOP 或 AspectJ,
它们处理AOP有3种技术,一种是生成一个类继承自原来的类,一种是使用动态代理,还有一种直接修改生成的 class 文件,

像 Spring AOP / JBoss AOP 使用的是前面2种方法,有些类不是 final 或想修改的方法不是 final 可以用继承的方法简单些,但对于 final 型的没办法只能用动态代理。这两种方法都是在程序运行时在内存中编译代码并加载它。

而对于 AspectJ 来说,它有一套自己的编译器,在编译项目之后再用它的编译器再编译一次就修改了生成的 class 文件,不过它还提供一个 ClassLoader 在加载时再修改 class 文件,不过这样就需要一些特殊的配置来启用这个 class loader,而用编译时修改就简单多了,它提供 ajdt 插件(在 eclipse 网站上下载) 来编辑和修改 AspectJ 配置。

用 base64 解码这个链接:aHR0cDovL3VzZXIucXpvbmUucXEuY29tLzg5NjA1NzMzNy8y
追问
这个我也了解了下,spring要写before和after方法,可现在的情况是我想把代码放到try-catch里面,如何实现呢,
追答

AspectJ 可以做到,这支持 after returning advice 和 after throwing advice, 及 around advice,这个 around advice 就是你想要的。


下面这个图片是那个链接中的图片,它演示了 around advice, AspectJ 中用 proceed() 表示调用原来的那个方法。


Storm代理
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I... 点击进入详情页
本回答由Storm代理提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式