1

アスペクトを正しく動作させるのに問題があります。何らかの理由で、アスペクトがどこに適用されるかについて私が本当に一般的である場合にのみ機能しているようです。4 つのポイントカット/アドバイスのうち、最後の一致のみが出力されます。ここで何が欠けていますか?

public aspect VerboseAspect
{
    after(Game game) returning:
            call(* Game.addPlayer(Player))
            && target(game) {
        System.out.println("addPlayer(Player): player has been added");
    }

    after(Game game) returning:
            call(* Game.addPlayer(..))
            && target(game) {
        System.out.println("addPlayer(..): player has been added");
    }

    after(Game game) returning:
            call(* Game.*(Player))
            && target(game) {
        System.out.println("*(Player):player has been added");
    }

    after(Game game) returning:
            call(* Game.*(..))
            && target(game) {
        System.out.println("*(..):player has been added");
    }
}

Java クラス:

public class Game {
    public void addPlayer(Player player) {
        System.out.println("inside class");
        this.players.add(player);
    }
}

出力:

inside class
*(..):player has been added
4

1 に答える 1

0

(コメントですが、長すぎます。)

どのバージョンのAspectJを使用していますか?どのように構築していますか?蟻?Maven?他の?

IntelliJ内では問題なく動作します。これを実行する:

public static void main(String[] args) {
    Game g = new Game();
    g.addPlayer(new Player());
}

生産:

inside class
addPlayer(Player): player has been added
addPlayer(..): player has been added
*(Player):player has been added
*(..):player has been added
于 2012-07-05T01:44:25.570 に答える