스프링 AOP
개념
OOP를 보완하는 수단으로 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법
흩어져 있으면 유지보수가 어렵다.
관심사별로 모은 뒤 적용할 곳을 입력해준다.
AOP 주요 개념
Aspect
각 모듈
Target
Aspect가 적용되는 대상
Advice
해야할 일
Join point
끼워넣을 지점
ex. 메서드 실행 시
Pointcut
어디에 적용되어야 하는지 지정하는 곳
AOP 구현체
Java
AspectJ
스프링 AOP
적용 방법
컴파일
로드 타임
클래스 파일을 로딩하는 시점
런타임
프록시 기반 AOP
프록시 기반 AOP 구현체
스프링 빈에만 AOP를 적용할 수 있다.
스프링 IoC와 연동해 애플리케이션에서 가장 흔한 문제를 해결하는 것이 목적이다.
모든 AOP 기능을 제공하기 위함이 아니다.
프록시 패턴
기존 코드 변경 없이 접근을 제어하거나 부가 기능을 추가할 수 있다.
문제점
매번 프록시 클래스를 작성해야 한다.
여러 클래스 여러 메서드에 적용하려면 복잡해진다.
스프링 AOP
이런 문제를 해결하기 위해 등장했다.
스프링 IoC 컨테이너가 제공하는 기반 시설과 Dynamic 프록시를 사용해 복잡한 문제를 해결한다.
스프링 IoC는 기존 빈을 대체하는 동적 프록시 빈을 만들어 등록한다.
클라이언트 코드는 변경되지 않는다.
동적 프록시
동적으로 프록시 객체를 생성하는 방법
자바는 인터페이스 기반의 프록시를 생성한다.
CGlib은 클래스 기반도 지원한다.
@AOP
애너테이션 기반의 스프링 @AOP
Aspect 정의
@Aspect
빈으로 등록해야 하므로 @Component 추가도 필요하다.
Pointcut 정의
@Pointcut(표현식)
주요 표현식
execution
@annotation
bean
포인트컷 조합
&&
||
!
Advice 정의
@Before
@AfterReturning
@AfterThrowing
@Around
Last updated