java - 抽象父类(super class)中实现的超接口(interface)方法的方面

标签 java aspectj spring-aop pointcut

我遇到的问题非常类似于:How to create an aspect on an Interface Method that extends from A "Super" Interface ,但我的 save 方法位于抽象父类(super class)中。

结构如下-

接口(interface):

public interface SuperServiceInterface {
    ReturnObj save(ParamObj);
}

public interface ServiceInterface extends SuperServiceInterface {
    ...
}

实现:

public abstract class SuperServiceImpl implements SuperServiceInterface {
    public ReturnObj save(ParamObj) {
        ...
    }
}

public class ServiceImpl implements ServiceInterface extends SuperServiceImpl {
    ...
}

我想检查对 ServiceInterface.save 方法进行的任何调用。

我当前的切入点如下所示:

@Around("within(com.xyz.api.ServiceInterface+) && execution(* save(..))")
public Object pointCut(final ProceedingJoinPoint call) throws Throwable {
}

当 save 方法被放入 ServiceImpl 中时,它会被触发,但当它被放入 SuperServiceImpl 中时,不会被触发。 我的周围切入点中缺少什么?

最佳答案

I just want to pointcut on the ServiceInterface, if I do it on SuperServiceInterface wouldn't it also intercept save calls on interfaces that also inherit from SuperServiceInterface?

是的,但您可以通过将 target() 类型限制为 ServiceInterface 来避免这种情况,如下所示:

@Around("execution(* save(..)) && target(serviceInterface)")
public Object pointCut(ProceedingJoinPoint thisJoinPoint, ServiceInterface serviceInterface)
    throws Throwable
{
    System.out.println(thisJoinPoint);
    return thisJoinPoint.proceed();
}

关于java - 抽象父类(super class)中实现的超接口(interface)方法的方面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28106880/

相关文章:

java - 生产系统中的 AspectJ 加载时织入

java - Spring MVC : How to read and change a @PathVariable value

java - Spring Boot - 如何从依赖项中包含 REST 端点?

java - 调试 OSGi 组件激活/停用问题

java - 以其他方式指定 -javaagent

spring - Java Spring AOP : Using CustomizableTraceInterceptor with JavaConfig @EnableAspectJAutoProxy, 不是 XML <aop:advisor>

java - Spring MVC 中整数(最终类)的 CGLib 代理

java - 如何使用 AOP Spring 和 log4j 实现日志记录

java - Python 中的类与 Java 中的类的工作方式相同吗?

java - JFXtras 类及其对象解释