본문 바로가기

spring

스프링 AOP를 적용하는 방법

Aop가 무엇인가?

관점 지향 프로그래밍을 위한 기술로 프록시를 활용하여 공통 관심사를 분리하는 기술이다.

@AspectJ 지원 활성화하기

aop를 활성화하기 위해서 자바 코드를 통해서 활성화를 한다.

@Configuration
@EnableAspectJAutoProxy
public class AppConfig {
}

하지만 @EnableAspectJAutoProxy의 기본값이 enable이기 때문에 생략해도 aop가 적용된다!

Aop 클래스 설정

aop과 관련된 로직을 구현할 클래스를 생성하면 @Aspect를 통해서 aop라는 메타 데이터를 작성해주어야한다. 이때 주의할 점으로는 @Aspect를 선언하더라도 오토 스캔의 대상이 되지 않기 때문에 @Component@Bean을 통해서 빈으로 등록하는 설정을 해주어야한다는 것이다.

Aop 범위를 지정하는 법

포인트 컷을 선언하여 aop를 적용할 타겟을 설정할 수 있다. 스프링에서 다양한 표현식을 제공하기 때문에 다음 공식문서를 참고하여 작성한다.
https://docs.spring.io/spring-framework/reference/core/aop/ataspectj/pointcuts.html

 

Declaring a Pointcut :: Spring Framework

During compilation, AspectJ processes pointcuts in order to optimize matching performance. Examining code and determining if each join point matches (statically or dynamically) a given pointcut is a costly process. (A dynamic match means the match cannot b

docs.spring.io

Aop 로직이 실행되는 시점을 결정하기

aop를 적용할 로직이 실행되기 전, 성공적으로 실행된 이후, 에러가 발생한 경우 등등에 따라서 다르게 실행될 수도 있고 실행 전후로 실행하기를 원하는 경우도 있다 이런 요구사항을 반영하여 간단한 어노테이션으로 시점을 결정할 수 있다.

스프링이 제공하는 기능에 대한 자세한 모든 정보는 다음 공식문서를 참고하자
https://docs.spring.io/spring-framework/reference/core/aop/ataspectj/advice.html

 

Declaring Advice :: Spring Framework

What happens when multiple pieces of advice all want to run at the same join point? Spring AOP follows the same precedence rules as AspectJ to determine the order of advice execution. The highest precedence advice runs first "on the way in" (so, given two

docs.spring.io

Reference

https://docs.spring.io/spring-framework/reference/core/aop/ataspectj/aspectj-support.html
https://velog.io/@jeongyunsung/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%ED%95%B4%EB%B6%80%ED%95%99-AOP2-EnableAspectJAutoProxy-AbstractAutoProxyCreator
https://velog.io/@backtony/Spring-AOP-%EC%B4%9D%EC%A0%95%EB%A6%AC