2012-07-05 4 views
1
와 함께 작동

제대로 작동하려면 몇 가지 문제가 있습니다. 어떤 이유로 나는 애스펙트가 적용되는 부분에 대해 정말로 일반적 일 때만 작동하는 것처럼 보입니다. 4 개의 포인트 컷/어드바이스 중 마지막으로 일치하는 것만을 출력하고 아무것도 출력하지 않습니다. 내가 여기서 무엇을 놓치고 있니?aspectj 포인트 컷/어드밴스가 *

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"); 
    } 
} 

자바 클래스 :

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

출력 :

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

답변

0

(코멘트,하지만 너무 오래.)

사용하는 AspectJ의 버전은 무엇? 너는 어떻게 지어? 개미? 메이븐? 다른?

IntelliJ 내부에서 잘 작동합니다. 이 실행 :

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

는 생산 : 나는 1.7을 사용하고 있는데 내가 그것을 구축 인 IntelliJ를 사용하고

inside class 
addPlayer(Player): player has been added 
addPlayer(..): player has been added 
*(Player):player has been added 
*(..):player has been added 
+0

. 내가 뭔가 올바르게 구성되어 있지 않은 것 같아요,하지만 그들 중 하나가 그것이 ajc와 컴파일하고 teh 측면을 읽고 말하는 일하고 있다는 사실 아닌가요? – dustins

+0

새로운 프로젝트를 만들었고 게임, 플레이어 및 내 측면이 있었기 때문에 내 프로젝트에 반드시 있어야합니다. 제대로 작동했습니다. 고물. – dustins