IT/Spring
Spring AOP - 어노테이션 만들기
sgoho01
2019. 11. 28. 12:22
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");
}