AOP

이유진·2024년 9월 10일
0
post-thumbnail

AOP

🌱AOP(Aspect Oriented Programing)

  • 관점지향 프로그래밍은 복잡한 프로그래밍 세상에서 관심사를 분리하여 모듈로 사용하는데 목적이 있다.

  • AOP : 핵심기능횡단 관심사(부가 기능)분리해서 관리하는 것

  • 핵심기능 : 시스템의 주요 목적, 메서드의 주요 기능

  • 부가기능 : 주요 목적이 아닌 부가기능

  • 횡단 관심사 : 부가 기능이 여러곳에서 반복적으로 적용되는 상황


🌱AOP 키워드 정리

  • 어드바이스 : 실제로 실행되는 횡단관심사(부가기능) 코드를 의미한다.(시간측정로직)

    • @Around, @Before, @After, @AfterThrowing
    /**
     * 어드바이스: 가장 강력한 어드바이저, 전체 흐름을 제어할 수 있습니다.
     * @param joinPoint
     * @return
     * @throws Throwable
     */
    @Around("serviceLayer()")  // 어노테이션 기반으로 포인트컷 설정
    public Object aroundMethod(ProceedingJoinPoint joinPoint) throws Throwable {
    
        log.info("::: BEFORE :::");
        try {
            Object result = joinPoint.proceed();
            System.out.println(result);
            log.info("::: AFTER RETURNING :::");
            return result;
    
        } catch (Exception e) {
            log.info("::: AFTER THROWING :::");
            throw e;
    
        } finally {
            log.info("::: AFTER :::");
        }
    }
  • 포인트컷 : 어드바이스를 적용할 구체적인 범위를 선택하는 규칙

    • @execution, @annotation, @within, @this, @target, @args
    /**
     * 포인트컷 : 서비스(Service) 패키지 기반
     */
     @Pointcut("execution(* com.standard.sparta.service..*(..))")
     private void serviceLayer(){}
    
    ----------------------------------------------------------------------
        
    /**
     * 포인트컷 : 어노테이션 범위 기반
     */
    @Pointcut("@annotation(com.standard.sparta.annotation.TrackTime)")
    private void trackTimeAnnotaion(){}
    
  • 타겟 : 어드바이스가 적용될 객체(포인트컷으로 지정)

// 반환타입 int, createCourse 이라는 매서드, 매개변수는 int 형 2개
execution(int createCourse(int, int)) 
// 반환타입 상관없음, createCourse 이라는 매서드, 매개변수는 int 형 2개    
execution(* createCourse(int, int)) 
execution(* createCourse(..)) // 반환타입 상관없음, createCourse 이라는 매서드, 매개변수 상관없음
execution(* *(..)) // 반환타입 상관없음, 메서드이름 상관없음, 매개변수 상관없음
  • 조인포인트 : 어드바이스가 적용되는 실행지점

    • 메서드 기준으로 어드바이스를 동작시킴으로 메서드들이 조인포인트가 된다.

  • 애스팩트 : 어드바이스와 포인트컷을 하나로 묶은 모듈

@Slf4j
@Aspect
/**
 * 애스팩트: 어드바이스와 포인트컷을 하나로 묶은 모듈
 */
public class AspectPractice {
    // 포인트컷
    // 어드바이스 위치
}

🌱정리

  • 어드바이스 는 반복되는 횡단관심사를 정의해 놓은곳 입니다.

  • 그 횡단관심사를 어느 범위에 적용할지 선택하는 것이 포인트컷 입니다.

  • 그리고 그 범위 안에서 선택받은 객체들 혹은 객체가 타겟 이 되는 것입니다.

  • 그 타겟 내에서 어드바이스 실제로 실행되는 시점을 조인포인트 라고 합니다.


🌱AOP 동작 원리

profile
🙌중요한건 꺾였는데도 그냥 하는 마음

0개의 댓글