AOP 용어정리
조인포인트(Joinpoint) |
클라이언트가 호출하는 모든 비즈니스 메소드. 조인포인트 중에서 포인트컷이 선택됨 (ServiceImpl클래스의 모든 메소드들을 조인포인트라고 생각하면 됨) |
포인트컷(Pointcut) |
필터링된 조인포인트. 수많은 비즈니스 메소드 중에서 우리가 원하는 특정 메소드에서만 횡단관심에 해당하는 공통기능을 수행시키기 위한 것 |
어드바이스(Advice) |
횡단관심에 해당하는 공통기능의 코드. 독립된 클래스의 메소드로 작성. |
위빙(Weaving) |
포인트컷으로 지정한 핵심 관심 메소드가 호출될 때 어드바이스에 해당하는 횡단관심 메소드가 삽입되는 과정. 위빙을 통해서 비지니스 메소드를 수정하지 않고도 횡단관심에 해당하는 기능을 추가하거나 변경할 수 있음. |
애스팩트(Aspect) 혹은 어드바이저(Advisor) |
어떤 포인트컷 메소드에 대해서 어떤 어드바이스 메소드를 실행할지 결정. 애스팩트 설정에 따라 AOP방식이 결정됨 |
다른 것들은 나중에 보되,
포인트컷
만 우선 살펴봅시다. 포인트컷도 나중에 다시 추가하겠지만서도..
AOP에서 가장 뽀인트가 아닌가 싶은 포인트컷.. 날 화나게 하는 뽀인트컷..
AOP는 원하는 시점에서 어떠한 메소드를 실행시키는 기능을 하게 하는데, pointcut은 원하는 시점? 이라기 보단 어떤 메소드가 실행될 때 이 메소드를 실행시킬 것인지 골라주는 거라고 생각하면 편할 것 같다.
그 시점을 조인포인트(서비스에 있는 모든 메소드들) 중에서 골라 그 특정 메소드를 pointcut으로 설정해준다고 생각하면 된다.
확신을 하지 못하고 같다 같다 하는 이유는 확실하지 않아서ㅠㅠ
id |
아이디로 포인트컷을 참조 |
expression |
어떤 메소드에서 메소드를 실행할지 정해줌 |
id 속성으로 포인트컷을 식별하기 위한 문자열 선언 -> 이 아이디로 포인트컷을 참조할 때 사용
expression속성
이 값을 어떻게 설정하느냐에 따라 필터링되는 메소드가 달라진다.
* com.ciel.animo. . *Impl . *(..)
* com.ciel.animo. . *Impl . get*(..)
요것을 분리해보면
* | com.ciel.animo. . | *Impl | . | *(..) |
* | com.ciel.animo. . | *Impl | . | get*(..) |
리턴타입 | 패키지 경로 | 클래스명 |
| 메소드명/매개변수 |
*은 모든 것을 의미하는 기호
클래스명에서 *Impl 라는 것은 뒤에 Impl라고 붙어있는 클래스들을 다 의미한다.
마찬가지로 메소드도 get*(..)은 get이라고 시작하는 모든 메소드를 의미한다.
<aop:pointcut id="getPointcut" expression="execution(* com.ciel.animo. . *Impl.get*(..))"/>
<aop:before pointcut-ref="getpointcut" method="printlog"/>
따라서 expression 속성에 * com.ciel.animo. . *Impl . get*(..)라고 쓸 경우
com.ciel.animo로 시작하는 모든 패키지에서 Impl로 끝나는 클래스에서 get으로 시작하는 메소드를 실행하기 전마다 printlog라는 메소드를 실하겠다는 것이 된당!
'건승하고있어요 > Spring framework' 카테고리의 다른 글
[Spring] 스프링2일차 - 어드바이스 동작 시점 (8) | 2018.02.11 |
---|---|
[Spring] 스프링2일차 - 포인트컷 표현식 (2) | 2018.02.11 |
[Spring] 스프링2일차 - 스프링AOP (2) | 2018.02.09 |
[Spring] 스프링1일차 - 의존성 주입 어노테이션 (0) | 2018.02.09 |
[Spring] 스프링1일차 - 어노테이션 기반 설정 (0) | 2018.02.09 |