Published 2020. 10. 23. 22:31
728x90
반응형

aop 처리를 위한 weaving 의존 추가 
pom.xml에 aop 처리를 위한 weaving 의존 추가
AspectJ와 한 팀임(위에 추가되어 있는 dependency)
> common 밑에 aop 패키지 만들기

> common\aop 밑에 LoggerAspect 클래스 만들기

 


LoggerAspect 클래스
joinPoint 메소드 시그니쳐 확인
> Signature signature = joinPoint.getSignature();
클래스 레벨에 @Component, @Aspect 선언
@Pointcut, @Around등을 설정해주고
> 이후 어노테이션들을 잘 처리하기 위해 xml에 등록이 필요함
> WEB-INF\spring\appServlet\servlet-context.xml
> 아래 코드 추가

<aop:aspectj-autoproxy/>

(application-context의 transaction관련 빈 설정을 가져와서 적용하는 일도 함)
> Namespaces > aop 체크 > 설정 끝

 

joinPoint에 화살표 모양 생김

 

 

aop에 사용된 controller, service객체 확인(proxy 객체)
proxy객체
1. 인터페이스 구현객체 : jdk동적proxy객체
2. 일반 객체 : cglib를 사용한 proxy객체

 


joinPoint를 어디에 둘지 생각하고 그에 상응하는 Advice를 사용하면 됨

Advice의 다섯가지타입
1. Around Advice
2. Before Advice
3. After Advice
4. AfterReturning Advice
5. AfterThrowing Advice

 


@실습문제
insertMemo요청의 실행시간을 구해 로깅하기
Hint! 스프링의 StopWatch클래스를 사용

@Component
@Aspect
@Slf4j
public class RuntimeCheckAspect {	
	@Pointcut("execution(* com.kh.spring.memo.controller.MemoController.insertMemo(..))")
	private void pointcut() {		
	}
	
	@Around("pointcut()")
	public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
		//시작전 체크
		StopWatch stopWatch = new StopWatch();
		stopWatch.start();
		Object obj = joinPoint.proceed();

		//끝난후 체크
		stopWatch.stop();
		long millis = stopWatch.getTotalTimeMillis();
		log.debug("insertMemo 소요시간 : {} ms", millis);
		return obj;
	}
}

aop는 주업무와 보조업무를 완벽하게 분리했다는것이 의미있음(oop를 더 oop스럽게 만들어줌)!

반응형
복사했습니다!