AOP란?
Aspect-oriendted Programming (AOP)은 OOP를 보완하는 수단으로, 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법.
AspectX
AspectY
AspectZ
에 각각의 concern들을 한 군데 모은다.
해당 독립된 concern들을 어느 Class에 적용해야하는 정보 또한
Aspect에 저장해 놓는다.
즉, 해야할 일과 그 일 을 어디에 적용해야하는지 묶어서 모듈화 하는 기법
- Aspect : 하나의 모듈
- Advice : 해야할 일들
- PointCut : 어디에 적용해야 하는지
- Target : 적용할 대상
- JoinPoint : 합류점 - 메서드 실행시점, 생성자 호출시점 등등...
AOP의 구현체
- AspectJ
다양한 JoinPoint와 기능들을 제공
- 스프링 AOP
AspectJ와 는 달리 국한적인 기능만을 제공한다.
https://en.wikipedia.org/wiki/Aspect-oriented_programming
AOP 적용방법
- 컴파일
(자바파일을 클래스 파일로 만들때) 바이트코드가 생성되기 이전 AOP가 적용되어 있어야한다.
로드타임, 런타임 시점에 성능 부하 X, 별도의 컴파일 과정을 거치기때문에 번거롭다.
- 로드타임 (load-time-weaving)
바이트코드를 클래스로딩하는 시점에 AOP가 적용되어 있어야한다.
- 런타임 (Spring AOP가 사용하는 방법)
특정 클래스에 Bean을 생성할 때 해당 클래스를 감싸는 Proxy Bean을 생성하여
Proxy Bean빈이 Advice(해야할 일)를 실행하고 해당 클래스를 실행한다.
'Spring > Spring' 카테고리의 다른 글
(SPRING) 스프링 AOP : 프록시 기반 AOP (0) | 2019.12.25 |
---|---|
(SPRING) 스프링 웹 애플리케이션 제거방법 (0) | 2019.12.25 |
(SPRING) 오브젝트와 의존관계 (스프링에 IOC) (0) | 2019.12.09 |
(SPRING) 오브젝트와 의존관계 (일반적인 IOC version02) (0) | 2019.12.09 |
(SPRING) 오브젝트와 의존관계 (일반적인 IOC version01) (0) | 2019.11.13 |