어드바이스에서 파라메터 처리
메서드를 어드바이스하는 애스펙트가 파라메터를 가질 때 어떻게 처리할 수 있을까?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | @Aspect public class TrackCounter { private Map<Integer, Integer> trackCounts = new HashMap<Integer, Integer>(); @Pointcut("execution(* soundsystem.CompactDisc.playTrack(int)) && args(trackNumber)") public void trackPlayed (int trackNumber) {} @Before("trackPlayed(trackNumber)") public void countTrack (int trackNumber) { int currentCount = getPlayCount(trackNumber); trackCounts.put(trackNumber, currentCount + 1); } public int getPlayCounts (int trackNumber) { return trackCounts.containKey(trackNumber) ? trackCounts.get(trackNumber) : 0; } } | cs |
이전의 샘플 코드와는 다른점은 execution의 메서드 인자가 명확하게 표기되었으며, args(trackNumber) 가 추가되었다는 것이다.
이는 playTrack() 에 전달되는 int 인자는 어드바이스로도 전달됨을 나타내는 것이며, 파라메터명 trackNumber 는 포인트커트 메서드의 동일 명의 파라메터와 연관된다.
|
이 포스트는 스프링 인 액션을 읽고 개인적으로 필요하다고 생각되는 내용을 정리한 포스트입니다. 일부 내용, 소스코드는 스프링 인 액션의 내용일 수 있습니다. |
반응형
'🌱 SPRING > 스프링 인 액션' 카테고리의 다른 글
스프링 MVC 세팅 (0) | 2018.05.30 |
---|---|
스프링에서의 요청 처리 순서 (0) | 2018.05.30 |
@Around (0) | 2018.05.26 |
애스펙트 정의하기 (0) | 2018.05.26 |
포인트 커트를 이용한 조인 포인트 선택 (0) | 2018.05.26 |