- AOP
- Aspect-oriendted Programming
- OOP를 보완하는 수단으로, 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법
- Aspect-oriendted Programming
- AOP 주요 개념
- Aspect와 Target
- Advice
- Join point와 Pointcut
- AOP 구현체
- 자바
- AspectJ
- Spring AOP
- 자바
- AOP 적용 방법
- 컴파일
- 로드 타임
- 런타임
- Spring AOP
- 프록시 기반의 AOP 구현체
- 스프링 빈에만 AOP를 적용할 수 있다.
- 모든 AOP 기능을 제공하는 것이 목적이 아니라, 스프링 IoC와 연동하여 엔터프라이즈 어플리케이션에서 가장 흔한 문제에 대한 해결책을 제공하는 것이 목적이다.
- 프록시 패턴
- 기존 코드 변경 없이 접근 제어 또는 부가 기능 추가를 할 수 있다.
- Spring AOP
- Spring IoC 컨테이너가 제공하는 기반 시설과 Dynamic 프록시를 사용하여 여러 복잡한 문제를 해결
- 동적 프록시
- 동적으로 프록시 객체를 생성하는 방법
- 자바가 제공하는 방법은 인터페이스 기반 프록시 생성
- CGlib은 클래스 기반 프록시도 지원한다.
- Spring IoC
- 기존 빈을 대체하는 동적 프록시 빈을 만들어 등록 시켜준다.
- 클라이언트 코드 변경이 없다.
- AbstractAutoProxyCreator implements BeanPostProcessor
- 기존 빈을 대체하는 동적 프록시 빈을 만들어 등록 시켜준다.
- 동적으로 프록시 객체를 생성하는 방법
- 어노테이션 기반의 스프링 @AOP
- 의존성 추가
- Aspect 정의
- @Aspect
- 빈으로 등록해야 하기 때문에 (컴포넌트 스캔을 사용한다면) @Component도 추가한다.
- Pointcut 정의
- @Pointcut(표현식)
- 주요 표현식
- execution
- @annotation
- bean
- Pointcut 조합
- &&
- ||
- !
- 주요 표현식
- @Pointcut(표현식)
- 어드바이스 정의
- @Before
- @AfterReturning
- @AfterThrowing
- @Around