AOP(Aspect Oriented Programming)

sixhustle·2021년 12월 7일
0

Spring

목록 보기
5/10

AOP

Aspected Oriented Programming (관점 지향 프로그래밍)

핵심 기능과 공통 기능을 구분하고,
공통/부가 기능을 Aspect로 정의하여 필요한 시점에 적용하는 프로그래밍 방식


AOP 용어 정리

1. Target

  • Aspect(관점)을 적용하는 곳 (class, method, ...)
  • 핵심 기능을 담고 있는 모듈

2. Advice

  • 부가 기능을 담고 있는 모듈
  • Target에 적용
  • 동작 시점
동작 시점설명
Beforemethod 실행 전 동작
Aftermethod 실행 후 동작
After-returningmethod 정상적으로 실행된 후에 동작
After-throwing예외가 발생한 후에 동작
Aroundㅇmethod 호출 이전, 이후, 예외 발생 등 모든 시점에서 동작

3. Join Point

  • Advice가 적용될 수 있는 위치를 말함
  • method 진입 시점, 생성자 호출 시점 등 다양한 시점에 적용 가능

4. Pointcut

  • Filtering된 Join Poin로 특정 method에서만 공통 기능을 수행시키기 위해 사용
  • 표현식은 execution으로 시작하고, method의 signature를 비교하는 방법을 이용

4-1. 지시자 (PCD, PointCust Designators)

1. execution

  • 가장 기본적은 PCD
  • method 기반
// rule
execution([1.접근제한자패턴] 2.리턴타입패턴 [3.타입패턴] 4.이름패턴 (5.타입패턴|..) [6.예외패턴])

// 모든 package에 포함된 class 중, 이름이 Service로 끝나는 class 
execution( * *..*Service.findUserId(..))

// 최소한의 규칙
execution( * findUserId(..))

// find로 시작하는 method
execution( * find*(..))
  1. (생략 가능) public, private 등
  2. return type의 패턴
  3. (생략 가능) package와 class이름에 대한 패턴
  4. method 이름 패턴
  5. parameter의 타입 패턴을 순서대로 넣을 수 있다. 와일드카드를 이용해 갯수에 상관없는 패턴 생성 가능
  6. 예외 이름 패턴
  7. 우아한 표현
    * : all
    .. : 0개 이상을 의미

2. within

// UserService 안에 있는 모든 method에 advice 주입
within(com.company.group.project.UserService)

// Service로 끝나는 class 안에 있는 모든 method에 advice주입
within(*..*Service)

3. annotation

@annotation(com.company.group.aop.SimpleProfiling)
@annotation(SimpleProfiling)

5. Weaving

  • 비즈니스 로직을 가진 method가 호출될 때, Advice(공통 기능)의 method가 배치되는 과정
  • Weaving을 통해 공통 기능과 핵심 기능을 가진 새로운 Proxy를 생성

6. Aspect

  • AOP의 기본 모듈
  • Aspect = Advice + Pointcut

References

0개의 댓글