본문 바로가기

건승하고있어요/Spring framework

[Spring] 스프링2일차 - AOP용어

반응형

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라는 메소드를 실하겠다는 것이 된당!



반응형