본문 바로가기
Programming/Spring

[spring] Annotation 기반 AOP 설정

by NAMP 2016. 4. 22.

[spring] Annotation 기반 AOP 설정

Annotation 사용을 위한 XML 설정

<aop:aspectj-autoproxy/>

advice, pointcut, aspect 필요

애스팩트 선언

Aspect 선언

@Aspect
public class Advice2 {...}

메모리에 띄우기 위해 Component 추가

@Component
@Aspect
public class Advice2 {...}

포인트컷 선언

pointcut 추가

@Component
@Aspect
public class Advice2 {
    @Pointcut("execution(* user.service.*Service.login(..))")
    public void point(){}    // id 역할을 하는 함수
}

after-returning 만 결과값 핸들링이 가능하다.

@Component
@Aspect
public class Advice2 {
    @Pointcut("execution(* user.service.*Service.login(..))")
    public void point(){}    // id 역할을 하는 함수
    
    @AfterReturning(pointcut="point()", returning="obj")
    public void log(JoinPoint jp, Object obj){
        System.out.println("==== log start ======");
        System.out.println("이름: "+jp.getSignature().getName());  
        System.out.println("결과값: "+ obj);  
        System.out.println("==== log end ======");
    }
}

component-scan이 되도록 한다.

<context:component-scan base-package="user, aop" />

아이콘에 S 가 표시된다.

성능 테스트 하는 around 추가
원래 메소드를 수행하기 위해서 ProceedingJoinPoint 가 필요하다.

    @Around(value = "point()")
    public Object aroundlog(ProceedingJoinPoint pp) throws Throwable{
        long start = System.currentTimeMillis();        
        Object obj = pp.proceed();
        long end = System.currentTimeMillis();
        String name = pp.getSignature().getName();
        System.out.println("(" + name + ") 메소드 수행에 걸린 시간: " + (end-start) + "ms");
        
        return obj;
    }

실행결과

UserDAO_JDBC
로그인 되었습니다. admin님
(login) 메소드 수행에 걸린 시간: 598ms

외부 Pointcut 참조하기

Advice 설정

파라미터 받기


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

[spring] 데이터 접근 디자인 패턴  (0) 2016.04.23
[spring] 다국어 지원  (0) 2016.04.22
[spring] XML 기반 AOP 설정  (0) 2016.04.21
[spring] AOP (Aspect Oriented Programming)  (0) 2016.04.21
[spring] Annotation 기반 설정  (0) 2016.04.20

댓글