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들을 생성할 때 후처리기에 보내 후처리 작업 요청