结合两个切入点但有参数(如果可能的话)

时间:2016-09-27 16:48:46

标签: aop aspectj spring-aop

对于Spring应用程序项目,在检查该对象是否存在之前,我想要deleteupdate某事物(实体)之前。

我有以下内容:

@Pointcut("execution(* com.manuel.jordan.service.impl.PersonaServiceImpl.deleteOne(String)) 
&& args(id)")
public void deleteOnePointcut(String id){}

@Pointcut("execution(* com.manuel.jordan.service.impl.PersonaServiceImpl.updateOne(com.manuel.jordan.domain.Persona)) 
&& args(persona)")
public void updateOnePointcut(Persona persona){}

如果我使用:

@Around("PersonaServicePointcut.deleteOnePointcut(id)")
public void delete(ProceedingJoinPoint proceedingJoinPoint, String id) throws Throwable{
    if(id != null){
        personaService.findOneById(id);
        //throw error if not exists, 
        //has no sense delete something that does not exists
        ...
    }
...

的工作原理。

我是如何尝试以下(上面显示的两个切入点的组合):

@Around("PersonaServicePointcut.deleteOnePointcut(id) ||
               PersonaServicePointcut.updateOnePointcut(persona)")
    public Object mai(ProceedingJoinPoint proceedingJoinPoint, String id, Persona persona){
        if(id != null){
            personaService.findOneById(id);
            //throw error
        }

        if(persona != null){
            personaService.findOneById(persona.getId());
            //throw error
        }

        //...

        proceedingJoinPoint.proceed();

        return null;
    }

但是我得到了

Caused by: java.lang.IllegalArgumentException: 
error at ::0 inconsistent binding

我假设因为我们有一个OR因为第二个或第三个参数为空。我的意思是应该分配所有参数。

我已经阅读了一些关于组合切入点的教程,但所有这些都没有参数。

只是好奇是否有可能实现这种方法。如果是的话怎么样?

0 个答案:

没有答案