注意:使用compile time weaving.
我有一个类似
的AOP拦截器@Around("enableMetricsPointCut(enableMetrics)")
public Object publishMetrics(final ProceedingJoinPoint jp,
final EnableMetrics enableMetrics) {
// Catch all Checked exceptions and convert them to unCheckedExceptions
}
现在,我已经注释了一个使用此AOP注释的方法,如
@EnableMetrics( )
public xyzMethod() {
// Code throws a checkedException : checkME
}
我被迫添加' throws checkME
'到xyzMethod。为什么是这样?考虑到编译时编织我不应该像我的AOP拦截器一样EnableMetrics
'不会抛出任何已检查的异常,我正在使用' around'。
有没有办法实现我的目标?我不希望像xyzMethod这样的方法声明任何抛出。
答案 0 :(得分:0)
你不能。
注释只是...注释。它们可用于避免显示警告(您告诉编译器您知道为什么这样做),生成辅助代码,或....但无论如何,通过删除注释获得的代码是正确的java代码。
在(当前版本)java中,检查异常必须在方法级别声明,AOP无法执行任何操作。
唯一的可能性是,在核心java级别,注释允许使用未声明的已检查异常。但我认为它不存在,因为声明throws Throwable
已经产生了这种效果。
TL / DR:如果您不想被检查的异常所困扰,请在您的方法中添加throws Throwable
(如果可以接受),或者使用显式包装方法。 AOP和任何其他基于注释的方法都不能从中拯救你。