AOP(Aspect Oriented Programming)
관점지향 프로그래밍
핵심로직(비즈니스메서드,CRUD) 에는 공통적으로 들어가는 로직이 존재 == 공통로직(횡단관심)
ex)로깅, 예외처리, 트랜잭션, 보안(인증,인가,허가 등)
어떤 횡단관심을 어떤 핵심로직에 연결할지 '설정' 하는 것을 AOP 설정이라 표현
Advice(LogAdvice)
횡단관심 - 로깅에 대한 공통로직을 만듦
동작 시점은 각 aop 시점마다 다름
스프링 AOP 설정
1) pom.xml에서 aspectj-version 설정

<!-- AOP -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.8</version>
</dependency>
2) 네임스페이스에서 aop 추가

3) applicationContext.xml 에서 aop설정

<context:component-scan base-package="타켓할 패키지"/>

context:component-scan
패키지 타겟
aop:config
모든 aop 전체설정을 감싸주는 태그
aop:pointcut
횡단관심을 적용할 핵심 로직을 의미
apointcut == 모든 핵심 로직
expression(표현식)에 어떤 핵심 로직인지 알려줘야 함
execution(메서드 시그니처) - execution(* com.kim.biz..*Impl.*(..))
1) [*] - 아웃풋
2) [com.kim.biz..*Impl.*] 패키지를 포함한 클래스명
com.kim.biz..*Impl.*
com.kim.biz..*Impl 패키지의 모든 Impl로 끝나는 클래스의 .* 모든 메서드
3) [(..)] - 모든 인자
aop:aspect
결합 - 횡단관심+포인트컷(횡단관심이 적용된 핵심로직)
aop:before - 비즈니스 메서드 완전 수행 전
aop:after - 비즈니스 메서드 수행 후 무조건 실행
aop:after-returning - 비즈니스 메서드 수행 후 비즈니스 메서드의 반환값을 사용할 때(메서드가 성공적으로 리턴되면 동작)
aop:after-throwing - 예외발생 시 동작
aop:around - 특정 비즈니스 메서드의 실행 전/후 전체에 영향을 줄 수 있음(로직 삽입 가능)(filter처럼 수행)
비즈니스메서드가 시작/끝나면 그 때 등록해둔 advice 가 실행 => 스프링 컨테이너가 담당 및 관리함
포인트컷을 경우에 따라 사용할 경우

aop:pointcut을 무조건 모든 aop:aspect 위에 선언해야 한다.
**주의할점
Before, After Returning, After Throwing, After 어드바이스는 JoinPoint 를 매개변수로 사용하고,
Around 어드바이스에서만 ProceedingJoinPoint 를 매개변수로 사용한다.
이는 Around 어드바이스에서만 proceed() 메소드가 필요하기 때문이다.

Around 어드바이스를 사용한 경우
ProceedingJoinPoint 인터페이스 - JoinPoint 를 상속받은 클래스
pjp.proceed()에 의해 비즈니스메서드가 실행됨
어떤 데이터 형이 올지 몰라 Object 형으로 해야 함
'IT Study > Spring' 카테고리의 다른 글
Spring - aop 설정을 @(어노테이션)으로 설정하기 (0) | 2023.01.02 |
---|---|
Spring - JoinPoint / 바인드 변수 (0) | 2023.01.02 |
Spring - 필드 주입(어노테이션 주입방식) (0) | 2023.01.02 |
Spring - 제어의 역행(IoC), 생성자 인젝션(생성자 주입방식) (0) | 2023.01.02 |
Spring - 설치 및 프로젝트 생성하기 (0) | 2023.01.02 |
댓글