프밍일기

AOP - Annotation 본문

Spring

AOP - Annotation

스에조theLED 2017. 3. 24. 01:25

■ Annotation을 이용한 AOP 설정


# 스프링 설정파일(applicationContext.xml)에 AOP 관련 Annotation을 사용하기 위한 엘리먼트를 추가


<context:component-scan base-package="com.fannell.site.polymorphism"></context:component-scan>

<aop:aspectj-autoproxy></aop:aspectj-autoproxy>



# Advice 클래스에 Pointcut 설정

- Pointcut 설정시 정의하는 빈 메소드는 XML에서 <aop:pointcut> 엘리먼트의 id에 해당하는 값을 설정


public class LogAdvice {

@Pointcut("execution(* com.fannell.site.polymorphism..*Impl.*(..))")

public void allPointcut() {}

}



# Advice 메소드에 실행시점을 지정하는 Annotation 정의

- 참조값으로 Pointcut 정의 메소드명을 지정


public class LogAdvice {

@Pointcut("execution(* com.fannell.site.polymorphism..*Impl.*(..))")

public void allPointcut() {}

@Before("allPointcut()")

public void printLog() {

System.out.println("[공통 로그] 비즈니스 로직 수행 전 동작");

}

}


- 실행시점 지정 나머지 Annotation(XML과 의미 동일) : @AfterReturning / @AfterThrowing / @After / @Around



# Aspect 설정

- 먼저 설정된 Pointcut 과 Advice 메소드가 결합되도록 Aspect Annotation 설정


@Aspect

public class LogAdvice {

@Pointcut("execution(* com.fannell.site.polymorphism..*Impl.*(..))")

public void allPointcut() {}

@Before("allPointcut()")

public void printLog() {

System.out.println("[공통 로그] 비즈니스 로직 수행 전 동작");

}

}



# Service 설정

- Advice 클래스가 Pointcut 필터링에 의해 실행될때 실제 객체가 존재해야 하므로 Service Annotation을 설정하여 미리 객체 생성


@Service

@Aspect

public class LogAdvice {

@Pointcut("execution(* com.fannell.site.polymorphism..*Impl.*(..))")

public void allPointcut() {}

@Before("allPointcut()")

public void printLog() {

System.out.println("[공통 로그] 비즈니스 로직 수행 전 동작");

}

}





'Spring' 카테고리의 다른 글

요청에 대한 JSON 응답 방법  (0) 2017.08.21
Spring과 MyBatis 연동 예제  (2) 2017.04.07
AOP - XML  (0) 2017.03.24
스프링 컨테이너 <beans> 설정 유의사항  (0) 2017.03.03
DI(Dependency Injection, 의존성주입)  (0) 2017.01.28
Comments