반응형
어노테이션 기반의 스프링 @AOP
-의존성 추가
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>sprint-boot-starter-aop</artifactId>
</dependency>
-@Aspect: 컴포넌트 스캔으로 빈을 등록해야 하므로 @Compent도 추가해야 합니다.
//PerfAspect.java
@Component
@Aspect
public class PerfAspect {
@Around("@annotation(PerLogging)")
//@Around는 메소드를 감싸는 형태로 제공되어, 메소드 호출 전과 후에 무언가를 할 수 있으며,
//발생하는 에러를 잡아서 에러가 났을 때 특정한 역할을 할 수도 있는 다용도의 어노테이션입니다.
//1. annotation이라는 표현식으로 PerLogging이 달려있는 곳에 적용하라는 설정입니다.
//2. execution 안에 표현식을 이용해서 어디에 적용할지를 정의할 수 있습니다.
//"execution(*me.whiteship..*.EventService.*(..))"
//me.whiteship으로 시작하는 파일 밑의 모든 클래스 중에서 EventService 안에 들어있는 모든 메소드에 적용
//3. 빈 사용: bean(simpleEventService)
public Object logPerf(ProceedingJoinPoint pjp) {
//pjp(proceeding join point): advice가 적용되는 대상(createEvent, publishEvent 메소드 그 자체)
long begin=System.currentTimeMillis();
Object retVal=pjp.proceed();
System.out.println(System.currentTimeMillis()-begin);
return retVal;
}
}
//PerLogging.java
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.CLASS)
//RetentionPolicy 기본값은 CLASS이므로 CLASS 이상을 설정해야 합니다.
//RetentionPolicy는 어노테이션 정보를 얼마나 유지할 것인가를 정하는 것입니다.
public @interface PerLogging {
}
//이 어노테이션을 사용하면 성능을 로깅해 줍니다.
-포인트컷 정의
·@Pointcut(표현식)
·주요 표현식: execution, @annotation, bean
-Advice 정의(추가 설명 필요!!!!!)
·@Around
·@Before
·@AfterReturning
·@AfterThrowing
반응형
'Spring > 스프링 프레임워크 핵심 원리' 카테고리의 다른 글
[Spring] #21. Null-safety (0) | 2020.12.26 |
---|---|
[Spring] #19. 스프링 AOP: 프록시 기반 AOP (0) | 2020.12.26 |
[Spring] #18. 스프링 AOP: 개념 소개 (0) | 2020.12.24 |
[Spring] #17. SpEL(스프링 Expression Language) (0) | 2020.12.24 |
[Spring] #16. 데이터 바인딩 추상화: Converter와 Formatter (0) | 2020.12.24 |