Java 组合多个切入点AspectJ将返回adviceDidNotMatch警告

Java 组合多个切入点AspectJ将返回adviceDidNotMatch警告,java,aop,aspectj,Java,Aop,Aspectj,我试图结合getter和setter的多个切入点来创建一个建议,如果两个切入点都被执行,那么这个建议将被执行。我已经在普通的AspectJ类和annotation@Aspect类中尝试过,但它仍然给我警告adviceDidNotMatch,最终建议没有执行。奇怪的是,如果我用&&(和)改变&&(或)它会起作用,但为什么&&根本不起作用呢 下面是在普通AspectJ类中声明的建议 package testMaven; pointcut getter() : execution(* testMav

我试图结合getter和setter的多个切入点来创建一个建议,如果两个切入点都被执行,那么这个建议将被执行。我已经在普通的AspectJ类和annotation@Aspect类中尝试过,但它仍然给我警告adviceDidNotMatch,最终建议没有执行。奇怪的是,如果我用&&(和)改变&&(或)它会起作用,但为什么&&根本不起作用呢

下面是在普通AspectJ类中声明的建议

package testMaven;

pointcut getter() : execution(* testMaven.testing.getDd(..));
before() : getter(){
    System.out.println("test get");
}

pointcut setter() : execution(* testMaven.testing.setDd(..));
before() : setter(){
    System.out.println("test set");
}

pointcut combine(): getter() && setter();

before(): combine(){
    System.out.println("testing combine");
}
}
下面是在annotation@Aspect类中声明的建议

package testMaven;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.annotation.Before;


@Aspect
public class aspecter {

    @Pointcut("call (*  testMaven.testing.getDd(..))")
    public void getter(){

    }

    @Pointcut("call (*  testMaven.testing.setDd(..))")
    public void setter(){}


    @Pointcut("execution (*  testMaven.tester.setZ(..))")
    public void setterZ(){}

    @Before("setterZ()")
    public void settingZ(){
        System.out.println("before set Z");
    }

    @Pointcut("getter() && setter()")
    public void getterSetter(){}

    @After("getterSetter()")
    public void testerd(){
        System.out.println("works");
    }

    @Pointcut("getter() && setterZ()")
    public void getterSetter2(){}

    @After("getterSetter2()")
    public void testinger(){
        System.out.println("ok");
    }

}
以下是我希望得到建议的测试类:

package testMaven;

public class testing {

    public int dd;

    public int getDd() {
        return dd;
    }

    public void setDd(int dd) {
        this.dd = dd;
    }
}


package testMaven;

public class testing {

    public int dd;


    public int getDd() {
        return dd;
    }


    public void setDd(int dd) {
        this.dd = dd;
    }


    public void aa(int a){
        System.out.println(a);
    }
}
这是主要课程:

package testMaven;

public class MainApp {

public static void main(String[] args) {
        // TODO Auto-generated method stub

        testing test = new testing();
        test.aa(2);
        test.setDd(3);
        tester et = new tester();
        et.setZ(3);
        et.printNo(1000);
        System.out.println(test.getDd());



    }

}
我的代码有问题吗?感谢您的帮助


谢谢您询问您的代码是否有问题。答案是肯定的。两个切入点
setter()
getter()
是互斥的。因此,将它们与
和&
相结合,即创建两个相互不相交的连接点集的交点,从逻辑上导致结果集为空。因此,您的组合切入点不匹配。您应该使用uniknow在其评论中建议的
|


如果你想取得其他成就,请以可理解的方式解释,如有必要,请举例说明、发表评论或更新你的问题。我真的没有得到你真正想要的。

你是否尝试过使用
@After(“getter()| Setter()”)
而不是
@After(“getterSetter()”)
@uniknow using|如果执行了其中一个建议,将执行该建议,对于这种情况,我需要使用&被建议认可,但&&没有。不理解反馈。我假设你想在调用getter或setter时打印
works
。@uniknow我想在调用getter和setter时打印works。你怎么能期望getter和setter同时被调用?这只是我想到的一个例子,我试图使用其他与&&无关的方法,但它仍然给了我一个错误,无法回答我的问题。我知道这是你的想法,但没人知道那应该是什么。对不起,如果你不能解释你真正想要什么,我帮不了你。你的代码毫无意义。再见。