본문 바로가기
IT/Spring

Spring AOP - 어노테이션 만들기

by sgoho01 2019. 11. 28.

Spring AOP

커스텀 어노테이션

@ 어노테이션 만들기

  • @interface 키워드로 생성
@Documented
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.METHOD)
public @interface PerfLogging {
}

@Documented : 자바독 생성시 document가 되도록

@Retention : 이 어노테이션의 정보를 어디까지 유지할 것인가

  • RetentionPolicy.SOURCE : 어노테이션 정보는 컴파일 이후 없어짐
  • RetentionPolicy.CLASS : 컴파일러가 클래스를 참조할 때까지 유효
  • RetentionPolicy.RUNTIME : 컴파일 이후에도 JVM에 의해서 참조 가능

@Target : 해당 어노테이션을 어디에서 사용할수 있는지 결정

  • ElementType.PACKAGE : 패키지 선언시
  • ElementType.TYPE : 타입 선언시
  • ElementType.CONSTRUCTOR : 생성자 선언시
  • ElementType.FIELD : 맴버 변수 선언시
  • ElementType.METHOD : 메소드 선언시
  • ElementType.ANNOTATION_TYPE : 어노테이션 타입 선언시
  • ElementType.LOCAL_VARIABLE : 지역 변수 선언시
  • ElementType.TYPE_PARAMETER : 매개 변수 타입 선언시

만든 어노테이션의 동작 정의

@Component
@Aspect
public class PerfAspect {
  // 해당 애노테이션(PerfLogging)이 설정되어 있는 메소드에만 적용
  @Around("@annotation(PerfLogging)")
  public Object logPefrf(ProceedingJoinPoint pjp) throws Throwable {
    long begin = System.currentTimeMillis();
    // 원래 메소드 실행하는 부분
    Object retVal = pjp.proceed();
    // 해당 어노테이션을 붙여서 사용하면 실행시간을 표시해 준다
    System.out.println(System.currentTimeMillis() - begin);
    return retVal;
  }
}

메소드에서 사용

@PerfLogging
public void createEvent() {
    log.debug("createEvent");
}

'IT > Spring' 카테고리의 다른 글

ModelMapper  (0) 2021.06.21
Spring Security (Springboot + thymeleaf)  (0) 2020.05.22
설정파일 YAML  (0) 2019.04.30
메이븐 (Maven)  (0) 2019.04.30
에러 처리 (ControllerAdvice)  (0) 2019.04.29

댓글