在超级接口方法方面的抽象超类实现(Aspect on super interface method

2019-09-27 02:45发布

我有相当类似的问题: 如何创建从“超级”接口扩展接口方法的方面 ,但我保存方法是一个抽象的超类。

的结构如下 -

接口:

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 {
}

当保存方法放入它被触发ServiceImpl ,但是当它是不是在SuperServiceImpl 。 那我在我的身边缺少的切入点?

Answer 1:

我只是想切点上ServiceInterface ,如果我做它SuperServiceInterface不会也拦截节省也继承接口调用SuperServiceInterface

是的,但你能避免通过限制target()键入ServiceInterface ,如下所示:

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


Answer 2:

从春天文档的例子:

由定义的任何方法的执行AccountService接口:
execution(* com.xyz.service.AccountService.*(..))

你的情况应该如下工作:

execution(* com.xyz.service.SuperServiceInterface.save(..))



文章来源: Aspect on super interface method implemented in abstract super class