繁体   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