관점 지향 프로그래밍 (AOP)
기존 객체지향 프로그래밍에서는 공통관심사항을 여러 모듈에서 적용하면서 중복된 코드를 양산하는 한계가 존재했다. AOP는 이러한 문제를 해결하기 위한 핵심관심사항과 전체에 적용되는 공통관심사항을 분리하면서 한계를 극복할 수 있도록 도와준다.
AOP 용어
Aspect - 여러 객체에서 공통으로 적용되는 공통관심 사항 (트랜잭션, 로깅, 보안...)
JointPoint - 공통 관심사항이 적용되는 지점(크로스 되는 지점), 호출되는 부분
PointCut - 범위를 지정, 누구에게 대상을 설정할 것인지 결정 who
Advice - 어느 시점에 공통 관심사를 적용할 것인지 결정(메서드 수행 전/후, 예외발생 후..) when
weaving - 어떤 Advice를 어떤 Pointcut에 적용할 것인지에 대한 설정 (Advisor)
AOP 설정
- <aop:config> : aop설정의 root 태그, weaving들의 묶음.
- <aop:aspect> : Aspect 설정 , 하나의 weaving에 대한 설정
- <aop:pointcut> : Pointcut 설정
- <aop:before> : 메서드 실행 전 실행될 Advice
- <aop:after-returning> : 메서드 정상 실행 후 실행될 Advice
- <aop:after-throwing> : 메서드에서 예외 발생시 실행될 Advice
- <aop:after> : 메서드 정상 또는 예외 발생 상관없이 실행될 Advice - finally
- <aop:around> : 모든 시점에서 적용시킬 수 있는 Advice
<aop:pointcut>
AspectJ 표현식을 통해 pointcut 지정
- id : 식별자로 advice 태그에서 사용됨
- expression : pointcut 지정
execution(수식어 리턴타입 패키지 클래스이름 메서드이름(파라미터))
execution(protected * abc.zyx..*Service.set*(..)
- protected의 제한자를 가지며 리턴타입은 모든 타입이 올 수 있다. abc.zyx 패키지와 그 하위 패키지에 있는 모든 클래스 중에서 service로 끝나는 클래스들 중에서 set으로 시작하는 메서드이며 파라미터는 0개 이상 오며 타입은 상관없다.
'Spring' 카테고리의 다른 글
[Spring] Spring MyBatis 연동 (JNDI) (0) | 2020.11.04 |
---|---|
[Spring] Spring MVC (0) | 2020.11.03 |
[Spring] 의존성 주입(Dependency Injection, DI) (0) | 2020.11.01 |
[Spring] 스프링 XML 설정 (0) | 2020.04.26 |
[Spring] IoC(Inversion of Control)과 스프링 컨테이너 (0) | 2020.04.25 |