当前位置: 首页 > 知识库问答 >
问题:

在spring中,为什么抛出类型为object的ThrowsAdviceInterceptor

海景曜
2023-03-14

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

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;
        //...
    }
}

共有1个答案

郑狐若
2023-03-14

从我的观点来看,

处理程序方法(通常是{@link org.springframework.aop.ThrowsAdvice}实现)

通常,但不是必需的或不总是。。。

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

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

ThrowsAdviceInterceptor仅在目标类至少有一个方法名以“afterThrowing”开头的处理程序和很少的参数时进行验证。。。

public class MyThrowsAdvice(){
    public void afterThrowing(Exception ex){...}
}

ThrowsAdviceInterceptor t = new ThrowsAdviceInterceptor(new MyThrowsAdvice());

上面的示例不是通过ThrowsAdvice实现的,但它对ThrowsAdviceInterceptor仍然有效。

为什么Spring团队不选择ThrowAdtions而不是Object。

我认为这将限制使用ThrowsAdviceInterceptor与上述选择。(

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

 类似资料:
  • 问题内容: 我遇到了这样一种情况,当从命令行使用时,我的scrapy代码可以正常工作,但是当我在部署(scrapy-deploy)并使用scrapyd api进行调度后使用同一spider时,会在“ scrapy.extensions.feedexport.FeedExporter”中引发错误”类。 一种是在初始化“ open_spider”信号时 其次是在初始化“ item_scraped”信号

  • 问题内容: final Multimap terms = getTerms(bq); for (Term t : terms.keySet()) { Collection C = new HashSet(terms.get(t)); if (!C.isEmpty()) { for (Iterator it = C.iterator(); it.hasNext();) { BooleanClause

  • 问题内容: 我试图将两个’Employee’对象添加到TreeSet中: 但是它抛出一个ClassCastException: 但是,如果我仅将一个对象添加到TreeSet中: 或者,如果我改用HashSet: 那就成功了。为什么会发生异常,我该如何解决? 问题答案: 要么必须实现,或者你需要提供一个比较创建时。 在文档中对此进行了详细说明: 插入排序集中的所有元素都必须实现接口(或被指定的比较器

  • 问题内容: 将字符串解析为字节时出现异常 问题答案: 这是因为默认的parse方法要求使用十进制格式的数字来解析十六进制数字,请使用以下parse: 其中16是解析的基础。 至于您的评论,您是对的。字节的最大值为0x7F。因此,您可以将其解析为并执行二进制与操作以获得LSB,即您的字节:

  • 问题内容: 我有这种方法: 映射: Person.hbm.xml Cars.hbm.xml 此方法适用于单个线程,并且在多个线程上,给我一个错误: AOP交易: 注意:当我在更新后添加Thread.sleep(5000)时,就可以了。 但是这种解决方案并不干净。 问题答案: 我有汽车->(1-n)个地方。而且我在表位置(id_car)有一个外键。此外键没有索引。当我向该外键添加索引时,我的问题已解

  • 当使用Mockito截尾时,我们通常为一个方法指定一个具体的参数。之后,我们可以用相同的参数调用Stubed方法。例如,在下面的代码中,get()用参数0进行了stubed。所以,当调用get()时,get()的参数也是0。因此,get()将返回一个整数,即3。 如果调用语句被修改为: 即参数更改为1,然后Mockito抛出“NullPointerException”,而不是“AssertionE