有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spring AOP建议没有被调用

我的建议不是从这个方法中调用方法getPOInvoice,但是如果我单独调用它,那么建议就会被调用,getPOInvoice并且getPOInvoice在同一个类中声明

public StreamingOutput getPDFStream(String invoiceId, String versionNumber) throws TugnavException {

   final POInvoice poInv =  getPOInvoice(invoiceId, versionNumber);
   ...
}

我的建议是:

@AfterReturning(value="execution(* com.tugnav.service.facade.*.get*(..))", returning="doc")
    public TugnavBaseDocument setupTimeCreatedString(TugnavBaseDocument doc){
    ...

}

如果我从另一个类调用此方法,则会调用建议

为什么没有内部呼叫


共 (2) 个答案

  1. # 2 楼答案

    你需要阅读关于proxies here的文档

    基本上,由于代理的生成方式,另一个实例方法中的实例方法调用不会触发方面(或代理行为)

    鉴于:

    class FooBar {
        // advised method
        public void foo() {
            bar();
        }
    
        // would've been advised
        public void bar() {
            // ... do something
        }
    }
    

    假设FooBar的一个实例被代理,对foo()的调用将触发aspect,因为从外部可以引用代理对象。在内部调用bar()时,可以访问this(相当于this.bar()),它是对目标实例(实际对象)的引用,因此没有添加行为

    有几种方法可以解决这个问题,但可能不是你想要的方式。参见this问题的答案