본문 바로가기

Spring/Spring

(SPRING) AOP(Aspect-Oriented-Programming)

AOP란?

Aspect-oriendted Programming (AOP)은 OOP를 보완하는 수단으로, 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법.

 

 

AspectX

AspectY

AspectZ

에 각각의 concern들을 한 군데 모은다.

 

해당 독립된 concern들을 어느 Class에 적용해야하는 정보 또한 

Aspect에 저장해 놓는다.

 

즉, 해야할 일과 그 일 을 어디에 적용해야하는지 묶어서 모듈화 하는 기법

  • Aspect : 하나의 모듈
  • Advice : 해야할 일들
  • PointCut : 어디에 적용해야 하는지
  • Target : 적용할 대상
  • JoinPoint : 합류점 - 메서드 실행시점,  생성자 호출시점 등등...

 


AOP의 구현체

  • AspectJ

다양한 JoinPoint와 기능들을 제공

  • 스프링 AOP

AspectJ와 는 달리 국한적인 기능만을 제공한다.

 

https://en.wikipedia.org/wiki/Aspect-oriented_programming

 

Aspect-oriented programming - Wikipedia

In computing, aspect-oriented programming (AOP) is a programming paradigm that aims to increase modularity by allowing the separation of cross-cutting concerns. It does so by adding additional behavior to existing code (an advice) without modifying the cod

en.wikipedia.org


AOP 적용방법

  • 컴파일

(자바파일을 클래스 파일로 만들때) 바이트코드가 생성되기 이전 AOP가 적용되어 있어야한다.

로드타임, 런타임 시점에 성능 부하 X, 별도의 컴파일 과정을 거치기때문에 번거롭다.

 

 

  • 로드타임 (load-time-weaving)

바이트코드를 클래스로딩하는 시점에 AOP가  적용되어 있어야한다.

 

 

  • 런타임 (Spring AOP가 사용하는 방법)

특정 클래스에 Bean을 생성할 때 해당 클래스를 감싸는 Proxy Bean을 생성하여 

Proxy Bean빈이 Advice(해야할 일)를 실행하고 해당 클래스를 실행한다.