Spring/스프링 프레임워크 핵심 원리

[Spring] #20. 스프링 AOP: @AOP

sujin7837 2020. 12. 26. 15:06
반응형

어노테이션 기반의 스프링 @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

반응형