OOP에서 모듈화의 핵심 단위는 클래스인 반면, AOP에서 모듈화의 단위는 Aspect
Aspect는 여러 타입과 객체에 거쳐서 사용되는 기능 (Cross Cutting, 트랜잭션 관리 등)의 모듈화
Spring framework의 필수 요소는 아니지만, AOP 프레임워크는 Spring IoC를 보완한다.
Aspect : 여러 클래스에 공통적으로 구현되는 관심사(Concern)의 모듈화
Join Point : 메서드 실행이나 예외처리와 같은 프로그램 실행 중의 특정 지점, Spring에서는 메서드 실행을 의미한다.
Advice : 특정 조인 포인트(Join Point)에서 Aspect에 의해서 취해진 행동, Around, Before, After 등의 Advice 타입이 존재
Pointcut : Join Point에 Aspect를 적용하기 위한 조건 서술.
Target 객체 : 하나 이상의 advice가 적용될 객체
AOP Proxy : AOP를 구현하기 위해 AOP 프레임워크에 의해 생성된 객체, Spring Framework에서 AOP 프록시는 JDK dynamic proxy 또는 CGLIB proxy이다.
Weaving : Aspect를 다른 객체와 연결하여 Advice 객체를 생성
Spring AOP는 기본값으로 표준 JDK dynamic proxy를 사용
인터페이스를 구현한 클래스가 아닌 경우, CGLIB 프록시 사용
@AspectJ : 일반 Java 클래스를 Aspect로 선언하는 스타일
Spring AOP에서는 pointcut 구문 분석, 매핑을 위해서 AspectJ 라이브러리 사용
AOP runtime은 순수 Spring AOP이며, AspectJ에 대한 종속성은 없다.
우리는 mvnrepository
aspectjweaver 1.9.8
aspectjruntime 1.9.8
버전 사용
before : target 메서드 호출 이전
after : target 메서드 호출 이후, java exception 문장의 finally와 같이 동작
after returning : target 메서드 정상 동작 후
after throwing : target 메서드 에러 발생 후
around : target 메서드의 실행시기, 방법, 실행여부를 결정
after returning은 실행 결과를 인자로 받음
after throwing은 에러를 인자로 받음