728x90
AOP 수행 확인을 위한 메시지 전송 기능 구현
# Spring - AOP 연습1 (로그, 트랜잭션처리)AOP기능을 지원할 클래스를 작성하기 앞서 AOP설정 방법 관련 링크
# AOP(Aspect Oriented Programming, 관점 지향 프로그래밍), 저장로그 예제
AOP 기능 - 로그출력기능(매개변수 및 메서드 실행시간 확인)
그동안은 모든 기능마다 로그를 출력하기 위해서 Controller, Service, DAO에 매번 코드를 작성해야했지만 AOP 기능을 사용하면 그럴 필요가 없어졌다. 원하는 시점(@Before
:호출전, @Around
:호출전후, @After
:호출후)에 로그 출력을 수행할 클래스를 만들기만 하면된다.
1. AOP의 로그기능을 수행하는 Advice클래스 작성
// Advice : 공통업무를 지원하는 클래스
@Component // 기타 bean
@Aspect // AOP bean : AOP 애노테이션
public class MessageAdvice {
private static final Logger logger = LoggerFactory.getLogger(MessageAdvice.class);
// 매개변수 확인, @Before(대상:호출전)
@Before("execution(* com.example.spring02.service.message.MessageService*.*(..))")
public void startLog(JoinPoint jp){
// 핵심업무의 클래스,매서드, 매개변수 로깅
logger.info("핵심업무 코드정보 : "+jp.getSignature());
logger.info("메서드 : "+jp.getSignature().getName());
logger.info("매개변수:"+Arrays.toString(jp.getArgs()));
}
// method 실행 시간 확인, @Around : 핵심업무 전후에 자동호출, ProceedingJoinPoint
@Around("execution(* com.example.spring02.service.message.MessageService*.*(..))")
public Object timeLog(ProceedingJoinPoint pjp) throws Throwable {
// 핵심업무 실행 전
long start = System.currentTimeMillis();
// 핵심업무 실행
Object result = pjp.proceed();
// 핵심업무 실행 후
long end = System.currentTimeMillis();
// 핵심업무 실행시간 연산
logger.info(pjp.getSignature().getName()+"메서드 실행시간:"+(end-start));
logger.info("==========================================");
return result;
}
}