AOP가 필요한 이유
- 객체지향 프로그래밍은
응집도
를높
이고결합도
는낮
춤- 이 때문에 여러 클래스에서 로깅이나 보안 및 트랜잭션 등
공통된 기능
들이 흩어져 존재하게 됨- 이 때 공통되는 부가 기능
(관심사)
를 이용해 해결
관점 지향 프로그래밍
이라고 함OOP
와 AOP
는 서로 보완관계
1. Aspect
- 흩어진 관심사(Crosscutting Concerns)를 묶어서 모듈화 한 것 (하나의 모듈)
- Advice와 Point Cut이 있음
2. Target
- Aspect가 가지고 있는 Advice가 적용되는 대상(클래스, 메서드 등등)
3. Advice
- 어떤 일을 해야할 지에 대한 것
4. Join Point
- 가장 흔한 Join Point는 메서드 실행 시점
5. Point Cut
- Join Point의 상세한 스펙을 정의
- 어디에 적용해야 하는지에 대한 정보를 가지고 있음
Proxy Bean
을 만들어 Proxy Bean
이 Aspect
코드를 추가하여 동작프록시 기반의 AOP 구현체
프록시 객체를 사용하는 이유
: 접근 제어 및 부가 기능을 추가하기 위해
Proxy
는 원래 해야 할 일을 가지고 있는 Real Subject
를 감싸서 Client
의 요청 처리.Spring에서 Bean을 자동으로 프록시로 만들어주는 메커니즘 존재
DefaultAdvisorAutoProxyCreator
클래스 BeanPostProcessor
라는 Bean 후처리기 인터페이스를 확장한 클래스Spring Container
는 해당 후처리기가 Bean으로 등록되어 있으면 Bean들을 생성할 때 후처리기에 보내 후처리 작업 요청