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 |
댓글