어노테이션 기반 AOP 사용을 위한 스프링 설정
1. 스프링 설정 파일에 <aop:aspectj-autoproxy> 엘리먼트 선언
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
<aop:aspectj-autoproxy/>엘리먼트만 선언하면 스프링 컨테이너는 aop 관련 어노테이션들을 인식하고 용도에 맞게 처리해준다.
-AOP관련 어노테이션들은 어드바이스 클래스에 설정
-어드바이스 클래스에 선언된 어노테이션들을 스프링 컨테이너가 설정하게 하기 위해서는 객체가 반드시 생성되어 있어야 함
-따라서 <bean>을 등록하거나 @Service어노테이션을 사용하여 컴포넌트가 검색될 수 있도록 해야함
Annotation 설정 |
@Service public class Advice{} |
XML 설정 |
<bean id="log" class="com.ciel.animo.Advice"></bean> |
2. 포인트컷 설정
-어노테이션 설정으로 포인트 컷을 선언할 경우 => @Pointcut 사용
-하나의 어드바이스 클래스 안에 여러개의 포인트 컷을 선언할 수 있음 -> 포인트컷을 식별하기 위한 식별자가 필요: 참조메소드 사용
참조메소드
:구현 로직이 없는 메소드 - 어떤 기능 처리를 목적으로 하지 않고 단순히 포인트컷을 식별하는 이름으로만 사용
@Pointcut("execution(* com.ciel.animo.. *impl.*(..)")<--이 경우에만 사용할 메소드
public void allPointcut(){}
@pointcut("executioin(* com.ciel.animo.. *impl.*(..)")
public void getPointcut(){}
3. 어드바이스 설정
-어드바이스 메소드가 언제 동작할지 결정하여 관련된 어노테이션을 메소드 위에 설정하면 됨
-어드바이스의 동작시점은 5가지 제공
-반드시 어드바이스 메소드가 결합될 포인트컷을 참조해야함 -> 어드바이스 어노테이션 뒤에 괄호를 추가하고 포인트컷 참조 메소드를 지정
@Pointcut("execution(* com.ciel.animo.. *impl.*(..)")
public void allPointcut(){}
@Before("allPointcut()")
public void printLog(){
System.out.println("비즈니스 로직 수행 전 동작");
}
allPointcut() 참조메소드로 지정한 비즈니스 메소드가 호출될 때, 어드바이스 메소드인 printLog()메소드가 before의 시점에서 동작하도록 설정
@Before |
비즈니스 메소드 실행 전에 동작 |
@AfterReturning |
비즈니스 메소드가 성공적으로 리턴되면 동작 |
@AfterThrowing |
비즈니스 메소드 실행 중 예외가 발생하면 동작 |
@After |
비즈니스 메소드가 실행된 후 무조건 실행 |
@Around |
호출 자체를 가로채 비즈니스 메소드 실행 전후에 처리할 로직 삽입 |
4. 애스팩트 설정
-포인트컷과 어드바이스의 결합-> 포트인트컷과 어드바이스를 결합하는 설정이 필요
@Service
@Aspect(pointcut + advice)
public class Advice{
@Pointcut("execution(* com.ciel.animo.. *impl.*(..)") ->포인트컷
public void allPointcut(){}
@Before("allPointcut()") ->어드바이스
public void printLog(){
System.out.println(비즈니스 로직 수행 전 동작");
}
'건승하고있어요 > Spring framework' 카테고리의 다른 글
[Spring] 스프링2일차 - 외부 Pointcut 참조하기 (2) | 2018.02.12 |
---|---|
[Spring] 스프링2일차 - 어드바이스 동작 시점 (8) | 2018.02.11 |
[Spring] 스프링2일차 - 포인트컷 표현식 (2) | 2018.02.11 |
[Spring] 스프링2일차 - AOP용어 (0) | 2018.02.10 |
[Spring] 스프링2일차 - 스프링AOP (2) | 2018.02.09 |