동작 시점
◎ aspect(위빙) 설정할 때 함께 설정한다.
시점 종류
before | 비즈니스 메서드 수행 전 |
after | 유사 finally 비즈니스 메서드 수행 후 |
after-returning | 비즈니스 메서드 return 반환 후 |
after-throwing | 유사 catch 비즈니스 메서드 예외 발생 시 |
around | 비즈니스 메서드 수행 전후로 접근가능 핵심로직의 성능평가 |
AfterReturningAdvice
◎ bean 설정
<bean class="com.spring.biz.common.AfterReturningAdvice" id="ara" />
<aop:config>
<aop:pointcut id="aPointcut" expression="execution(* com.spring.biz..*Impl.*(..))" />
<aop:pointcut id="bPointcut" expression="execution(* com.spring.biz..*Impl.select*(..))" />
<aop:aspect ref="ara">
<aop:after-returning pointcut-ref="bPointcut" method="afterReturningPrintLog" />
</aop:aspect>
</aop:config>
◎ Service 코드
public class AfterReturningAdvice {
public void afterReturningPrintLog() {
System.out.println(" 로그 02 비즈니스 메서드 수행 후에 로그를 출력합니다.");
}
}
AfterThrowingAdvice
◎ bean 설정
<bean class="com.spring.biz.common.AfterThrowingAdvice" id="ata" />
<aop:config>
<aop:pointcut id="aPointcut" expression="execution(* com.spring.biz..*Impl.*(..))" />
<aop:pointcut id="bPointcut" expression="execution(* com.spring.biz..*Impl.select*(..))" />
<aop:aspect ref="ata">
<aop:after-throwing pointcut-ref="aPointcut" method="printException" />
</aop:aspect>
</aop:config>
◎ Service 코드
public class AfterThrowingAdvice {
public void printException() {
System.out.println(" 로그 03 예외 발생");
}
}
AroundAdvice
◎ bean 설정
<bean class="com.spring.biz.common.AroundAdvice" id="aa" />
<aop:config>
<aop:pointcut id="aPointcut" expression="execution(* com.spring.biz..*Impl.*(..))" />
<aop:pointcut id="bPointcut" expression="execution(* com.spring.biz..*Impl.select*(..))" />
<aop:aspect ref="aa">
<aop:around pointcut-ref="aPointcut" method="aroundPrintLog" />
</aop:aspect>
</aop:config>
◎ Service 코드
public class AroundAdvice {
public Object aroundPrintLog(ProceedingJoinPoint pjp) throws Throwable {
String methodName=pjp.getSignature().getName();
System.out.println("[BEFORE]");
StopWatch sw=new StopWatch();
sw.start();
Object obj=pjp.proceed();
// 비즈니스 메서드가 수행됨
sw.stop();
System.out.println("[AFTER]");
System.out.println("비즈니스 메서드 : "+methodName);
System.out.println("수행하는데에 걸린시간 : "+sw.getTotalTimeMillis()+"(ms)초");
return obj;
}
}
'프레임워크 > Spring' 카테고리의 다른 글
[프레임워크] <Spring>〈Maven〉JDBCTempalete을 활용한 DAO (0) | 2024.03.04 |
---|---|
[프레임워크] <Spring>〈Maven〉Advice의 @어노테이션화 (0) | 2024.03.01 |
[프레임워크] <Spring>〈Maven〉AOP 관심 분리 (0) | 2024.02.29 |
[프레임워크] <Spring>〈Maven〉pom.xml 설정 개선 feat. 어노테이션 (0) | 2024.02.28 |
[프레임 워크] <Spring>〈Maven〉application.xml 생성 (0) | 2024.02.28 |