簡體   English   中英

Spring Boot和AspectJ —我可以攔截對java.util.ArrayList.size()方法的調用嗎?

[英]Spring Boot and AspectJ — Can I intercept a call to the java.util.ArrayList.size() method?

我正在使用Spring Boot學習有關AOP的知識,並且我對這個概念有很好的了解。 我可以攔截對已創建方法的調用,但是在其他庫(例如“ java.util.ArrayList.size()”)中找到的方法呢? 也可以攔截對這些方法的調用嗎? 如果是這樣,方面將是什么樣? 我已經嘗試了以下方面聲明,但是這里可能遺漏了一些內容:

@Around(value = "execution(int java.util.ArrayList.size(..))")
    public void aroundListSize(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("Before the size method is being invoked.");

        joinPoint.proceed();

        System.out.println("After the size method was invoked.");
    }

Spring AOP圍繞建議的類創建代理。 與直接修改建議類的字節碼的本機AspectJ相比,這有很多限制。 這些限制(其中包括許多限制)之一是, 它僅適用於Spring托管的bean,不適用於任何Java對象 ,例如使用本機AspectJ時。

如果您的ArrayList對象是Spring托管的bean,那么它在某種程度上會起作用,但是您還需要注意,基於代理的AOP機制僅通過建議類的外部接口起作用,因此只有在通過提供的Spring調用時才起作用代理類,而不是通過this引用調用時。 因此,從建議的類的anotherMethod()調用this.method()不會通過代理實例,並且不會執行建議代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM