Spring AOP Pointcut 질문입니다.

67 views
Skip to first unread message

Ki-Seok Kim

unread,
May 22, 2012, 10:24:35 PM5/22/12
to ks...@googlegroups.com
지금 AOP 구성하는 예제를 보던중 이해가 안되는 부분이 있어서 질문드립니다.

아래 예제를 보면 Pointcut 을 정의하는데 왜 빈 메소드를 정의하는지 궁금합니다.

아래 save() 메소드에 무언가 처리하는 로직을 추가할수 있는지..

아니면 그냥 문법인지, 왜 이렇게 써야하는지 이해가 안됩니다.

@Pointcut("execution(* com.saver.*.*(..))")
public void save(){}
@Around("save()")
public Object profile(ProceedingJoinPoint pjp) throws Throwable{
        ......
}

Sungchul Park

unread,
May 23, 2012, 12:39:52 AM5/23/12
to ks...@googlegroups.com
AspectJ 5에서는 기존 asjpectj 언어를 사용해서 애스펙트를 정의하는 방식에, 자바 5의 어노테이션을 활용한 애스펙트 정의 방법이 추가 되었습니다. 지금 보여주신 코드가  AspectJ 5의 어노테이션 방식 애스펙트 선언에 해당합니다.

어노테이션을 사용한 방식은 기존 AsjpectJ의 애스펙트 정의 문법이 자바 문법과 유사한 점을 활용한 방법인데, 자바 문법과 공통된 부분은 자바 코드로 표현하고 부족한 부분만 어노테이션으로 메타 정보를 추가하는 방식입니다. 자바 코드로 표현되는 부분을 컴파일 단계에서 검증할 수 있다는 장점이 있죠.

결국 보여주신 예제의  save() 메서드는 일반 자바 코드라기 보다는 자바 코드를 활용해 표현한 애스펙트의 포인트 컷 선언으로 보는 게 맞습니다. 그리고 기존 포인트컷 선언 표현식의 if(...) 구문을 어노테이션 방식으로 표현할 때에는 메서드의 내부에 이를 판단하는 로직을 넣기도 하기 때문에 항상 내용이 빈 메서드 형태로만 사용되지도 않습니다.

문서에 다양한 사례가 나오니 참고하십시오.

http://www.eclipse.org/aspectj/doc/released/adk15notebook/ataspectj-pcadvice.html#pointcuts


12. 5. 23. 오전 11:24, Ki-Seok Kim 쓴 글:
--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.

Ki-Seok Kim

unread,
May 23, 2012, 3:05:18 AM5/23/12
to ks...@googlegroups.com
자세한 답변 정말 감사합니다.


2012년 5월 23일 오후 1:39, Sungchul Park <gyu...@gmail.com>님의 말:
Reply all
Reply to author
Forward
0 new messages