본문 바로가기
Java/Spring

Spring) AOP 개념 정리

by 박채니 2022. 8. 25.

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

 

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.


AOP (Aspect Oriented Programming)

- 관점 지향 프로그래밍

- 관심사의 분리해서 필요한 주업무에 모듈형식으로 삽입해 실행

- 비지니스 로직(주업무)과 공통 모듈(보조업무)로 구분한 후 비지니스 로직 코드 외부에서 필요한 시점에 공통모듈을 삽입하여 실행

 

 

 

☆ 관점 (Aspect)

- 구현하고자 하는 횡단 관심사의 기능 (클래스 단위)

- 한 개 이상의 Pointcut(advice를 어디에 적용할지 결정)과 Advice(부가기능) 조합으로 만들어짐

 

☆ Joinpoint

- 주업무 처리 메소드

- 관점을 삽입하여 Advice가 적용될 수 있는 위치

대표적인 조인 포인트

① 메소드가 호출되는 부분 또는 리턴되는 부분

② 인스턴스가 만들어지는 지점

③ 예외가 던져지는 지점

④ 클래스가 초기화 되는 곳

 

☆ Pointcut

- joinpoint 선정룰과 같은 개념

- 어느 클래스의 어떤 메소드, 어느 joinpoint를 사용할 것인가?

 

AspectJ에서는 와일드 카드를 이용한 메소드 시그니처 사용

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern(param-pattern) throws-pattern?)

* modifiers-pattern? → 접근제한자

* ret-type-pattern → 리턴타입

* declaring-type-pattern? → 선언패턴(클래스) 어느 패키지의 어느 클래스~

* name-pattern → 메소드 이름

* (param-pattern) → 파라미터 타입

* throws-pattern? → 어떤 예외를 던지는지!

 

※ Pointcuts Expression API

https://docs.spring.io/spring-framework/docs/4.2.x/spring-framework-reference/html/aop.html#aop-pointcuts-examples

 

10. Aspect Oriented Programming with Spring

Aspect-Oriented Programming (AOP) complements Object-Oriented Programming (OOP) by providing another way of thinking about program structure. The key unit of modularity in OOP is the class, whereas in AOP the unit of modularity is the aspect. Aspects enabl

docs.spring.io

 

☆ Advice

- 각 조인포인트에 삽입되어져 동작할 수 있는 코드

 

joinpoint와 결합하여 동작하는 시점

① Before Advice : Joinpoint 전에 실행

② Around Advice : Joinpoint 앞과 뒤에서 실행

③ After Returning Advice : Joinpoint 메소드가 리턴될 시 실행. Return된 object에 접근 가능

④ After Advice : Joinpoint 후에 무조건 실행됨 (예외 발생 시에도 실행. finally와 유사)

⑤ After Throwing Advice : Joinpoint 메소드 실행 중 예외 발생 시 실행

 

☆ Weaving (=Cross-Cutting)

- Pointcut에 의해서 결정된 Joinpoint에 지정된 Advice를 삽입하는 과정

 

weaving하는 3가지 방법

① 컴파일 시에 weaving하기

② 클래스 로딩 시에 weaving하기

③ 런타임시에 weaving하기