티스토리 뷰

Programming/Spring

AOP

Albothyl 2019. 3. 27. 21:20

1. create aop class

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Slf4j
@Aspect
@Component
public class SomeAop {

    @Around("execution(* com.project.kanban.web.SomeController.*(..))")
    public Object aroundLogging(ProceedingJoinPoint joinPoint) throws Throwable {
        Object result = null;
        try {
            long start = System.currentTimeMillis();
            result = joinPoint.proceed();
            long end = System.currentTimeMillis();

            log.info("수행 시간 : "+ (end - start));
        } catch (Throwable throwable) {
            log.info("exception! ");
        }
        return result;
    }
}

 

2. create some aop bean

@Bean
public SomeAop someAop() {
    return new SomeAop();
}

 

3. add EnableAspectJAutoProxy annotation

@EnableAspectJAutoProxy
public class SomeConfiguration {
    ...
}

  • aop는 비지니스와 관련없이 원하는 시점, 대상에 특정 로직을 적용할 수 있다
  • @EnableAspectJAutoProxy는 @Aspect로 애스팩트를 정의할 수 있게 해주는 @AspectJ AOP 컨테이너 인프라 빈을 등록해준다.

용어 설명
 타겟 (Target) 타깃은 부가기능을 부여할 대상이다. 핵심기능을 담은 클래스일 수도 있지만 경우에 따라서는 다른 부가기능을 제공하는 프록시 오브젝트일 수도 있다.
 어드바이스 (Advice) 어드바이스는 타깃에게 제공할 부가기능을 담은 모률이다. 어드바이스는 오브젝트 로 정의하기도 하지만 메소드 레벨에서 정의할 수도 있다.
어드바이스는 여러 가지 종류가 있다. Methodlnterceptor처럼 메소드 호출 과정 에 전반적으로 참여히는 것도 있지만 예외가 발생했을 때만 동작하는 어드바이스처 럼 메소드 호출 과정의 일부에서만 동작하는 어드바이스도 있다.
 조인포인트 (JoinPoint) 조인 포인트joinPoint란 어드바이스가 적용될 수 있는 위치를 말 한다. 스프링의 프록시 AOP에서 조인 포인트는 메소드의 실행 단계뿐이다. 타깃 오 브젝트가 구현한 인터페이스의 모든 메소드는 조인 포인트가 된다.
 포인트컷 (PointCut) 포인트컷이란 어드바이스를 적용할 조인 포인트를 선별하는 작업 또는 그 기능을 정 의한 모률을 말한다. 스프링 AOP의 조인 포인트는 메소드의 실행이므로 스프령의 포인트컷은 메소드를 선정하는 기능을 갖고 있다. 그래서 포인트컷 표현식은 메소드 의 실행이라는 의미인 execution으로 시작하고 메소드의 시그니처를 비교히는 방 법을 주로 이용한다. 메소드는 클래스 안에 존재히는 것이기 때문에 메소드 선정이 란 결국 클래스를 선정하고 그 안의 메소드를 선정하는 과정을 거치게 된다.
 프록시 (Proxy) 프록시는 클라이언트와 타깃 λ에에 투명하게 존재하면서 부가기능을 제공히는 오 브젝트다.DI를 통해 타깃 대신 클라이언트에게 주입되며 클라이언트의 메소드 호 출을 대신 받아서 타깃에 위임해주면서, 그 과정에서 부가기능을 부여한다. 스프링 은 프록시를 이용해 AOP를 지원한다.
 어드바이저 (Advisor) 어드바이저는 포인트컷과 어드바이스를 하나씩 갖고 있는 오브젝트다. 어드바이저 는 어떤 부가기능어드바이스)을 어디에(포인트컷) 전달할 것인가를 알고 있는 AOP의 가장 기본이 되는 모률이다. 스프링은 자동 프록시 생성기가 어드바이저를 AOP 작업의 정보로 활용한다. 어드바이저는 스프링 AOP에서만 사용되는 특별한 용어이고, 일 반적인 AOP에서는 시용되지 않는다.
 애스펙트 (Aspect) OOP의 클래스와 마찬가지로 애스펙트는 AOP의 기본 모률이다. 한 개 또는 그 이상 의 포인트컷과 어드바이스의 조합으로 만들어지며 보통 싱글톤 형태의 오브젝트로 존재한다. 따라서 클래스와 같은 모률 정의와 오브젝트와 같은 실제(인스턴스)의 구분 이 특별히 없다. 두 가지 모두 애스펙트라고 불린다. 스프링의 어드바이저는 아주 단 순한 애스펙트라고 볼 수도 있다.

@Around("execution(* com.project.kanban.web.SomeController.*(..))")

 

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

ControllerAdvice  (1) 2019.04.01
Request Param Validate (JSR-303)  (0) 2019.03.30
Request Proxy  (0) 2019.03.27
Argument Resolver  (0) 2019.03.27
Interceptor  (1) 2019.03.27
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함