在春季,Why是抛出对象类型的ThrowsAdviceInterceptor



为什么throwsAdvice对象的类型不是throwsAdvise?作者的评论表明,这似乎是一个有意的设计。我不知道这个奇怪的设计有什么用,也不知道我是否忽略了任何细节。

public class ThrowsAdviceInterceptor implements MethodInterceptor, AfterAdvice {
private final Object throwsAdvice;
/**
* Create a new ThrowsAdviceInterceptor for the given ThrowsAdvice.
* @param throwsAdvice the advice object that defines the exception handler methods
* (usually a {@link org.springframework.aop.ThrowsAdvice} implementation)
*/
public ThrowsAdviceInterceptor(Object throwsAdvice) {
Assert.notNull(throwsAdvice, "Advice must not be null");
this.throwsAdvice = throwsAdvice;
//...
}
}

从我的角度来看,

"处理程序方法(通常一个{@linkorg.springframework.aop.SthrowsAdvice}实现(

通常,但不需要总是。。。

这意味着对象throwsAdvice不需要具有类型throwsAdvice,但它通常是throwsAdvice。

目标的类型可以是ThrowsAdvice、Object。。。

ThrowsAdviceInterceptor仅在您的目标类至少有一个方法名称以"开头的处理程序时进行验证;after投掷";以及一些参数。。。

public class MyThrowsAdvice(){
public void afterThrowing(Exception ex){...}
}
ThrowsAdviceInterceptor t = new ThrowsAdviceInterceptor(new MyThrowsAdvice());

上面的例子并没有实现ThrowsAdvice,但它仍然对ThrowsAveniceInterceptor有效。

为什么spring团队不选择ThrowAdvice而不是Object。

我认为以上选择将限制ThrowsAdviceInterceptor的使用。(只是我的看法(。

https://github.com/joshlong/spring-framework-1/blob/master/spring-aop/src/main/java/org/springframework/aop/framework/adapter/ThrowsAdviceInterceptor.java

相关内容

  • 没有找到相关文章

最新更新