능글맞은 구렁이
Spring-AOP(advice) 본문
1. advice의 동작시점
어드바이스는 각 조인트포인트에 삽입되어 동작할 횡단 관심에 해당하는 공통 기능이며, 동작시점은 각 AOP 기술마다다르다
<aop:config>
<aop:config>
<aop:pointcut~~/>
<aop:aspect~~>
<aop:before~~/>
<aop:after-returning~~/>
<aop:after-throwing~~/>
<aop:after~~~/>
<aop:atfer-around~~/>
</aop:aspect>
</aop:config>
</aop:config>
2. Before어드바이스
Before어드바이스는 포인트컷으로 지정된 메소드 호출 시, 메소드가 실행되기 전에 처리될 내용들을 기술하기 위해 사용한다. (비즈니스 메소드 실행전 동작)
/**어노테이션방법의 애스팩스설정**/
@Service
@Aspect
public class BeforeAdvice {
@Pointcut("execution(* com.freeflux.biz..*Impl.*(..))")
public void allPointCut(){}
@Before("allPointCut()")
public void beforeLog(JoinPoint jp){
String method=jp.getSignature().getName();
Object[] args=jp.getArgs();
System.out.println("[before 어드바이스] 실행);
}
}
/**XML방식의 어드바이스**/
public class BeforeAdvice {
public void beforeLog(JoinPoint jp){
String method=jp.getSignature().getName();
Object[] args=jp.getArgs();
System.out.println("[before 어드바이스] 실행);
}
}
3. After Returning어드바이스
After Returning 어드바이스는 포인트컷으로 지정된 메소드가 정상적으로 실행되고 나서, 메소드 수행 결과로 생성된 데이터를 리턴하는 시점에서 동작한다. 따라서 비즈니스 메소드 수행 결과로 얻은 결과데이터를 이용하여 사후 처리 로직을 추가할 때 사용한다.(비즈니스 메소드가 성공적으로 리턴되면 동작)
4. After Throwing어드바이스
포인트컷으로 지정한 메소드가 실행되다가 예외가 발생하는 시점에서 동작한다. 따라서 예외 처리 어드바이스를 설정할 때 사용한다.
5. After어드바이스
try-catch-finally 구문에서 finally 블로거럼 예외 발생 여부에 상관없이 비즈니스 메소드가 실행된 후, 무조건 실행되는 어드바이스를 등록할 때 사용한다.
6. Around어드바이스
어떤 상황에서는 하나의 어드바이스가 비즈니스 메소드 실행 전과 후에 모두 동작하여 로직을 처리하는 경우도 있는데 이때 사용 하는 어드바이스가 Around 어드바이스이다. Around어드바이스는 클라이언트의 메소드 호출을 가로챈다.
그래서 클라이언트가 호출한 비즈니스 메소드가 실행되기 전에 사전 처리 로직을 수행할 수 있으며, 비즈니스 메소드가 모두 실행되고 나서 사후 처리 로직을 수행할 수 있다.
import org.aspectj.lang.ProceedingJoinPoint;
public class AroundAdvice{
public Object arountLog(ProceedingJoinPoint pjp) throws Throwable{
System.out.println("[BEFORE]:비즈니스 메소드 수행 전에 처리할 내용");
Object returnObj=pjp.proceed();
System.out.println("[AFTER]: 비즈니스 수행 후에 처리할 내용");
return returnObj;
}
}
---------------------------------------------------------------------------------------------
/**applicationContext.XML**/
<baen id="around" class="com.jbr.biz.common.AroundAdvice"/>
<aop:config>
<aop:pointcut id="allPointcut" expression="execution(* com.jbr.biz..*Impl.*(..))" />
<aop:aspect ref="around">
<aop:around pointcut-ref="allPointcut" method="arountLog"/>
</aop:aspect>
</aop:config>
'Framework > Spring' 카테고리의 다른 글
Spring-AOP(어노테이션 기반) (0) | 2021.06.22 |
---|---|
Spring-AOP(XML 기반) (0) | 2021.06.22 |
Spring-AOP(간략한 흐름) (0) | 2021.06.21 |
Spring-DI/AOP정리! (0) | 2021.06.18 |
Spring-Annotation(어노테이션) (0) | 2021.06.15 |
Comments