81. anotation으로 AOP사용하기

hanahana·2022년 10월 7일
0

Spring 학원수강

목록 보기
39/45
post-thumbnail

advice클래스 작성하기

@Component
@Aspect
public class LogAdvice {
	
	@Pointcut("execution(* com.kh.junspring..*Impl*.*(..))")
	public void allPointCut() {
		
	}
	
	@Before("allPointCut()")
	public void printLog() {
		System.out.println("[공통로그 - LogAdvice] 비지니스 로직 수행 전 동작");
	}

	@After("allPointCut()")
	public void printAfterLog() {
		System.out.println("[공통로그-LogAdvice]  비지니스 로직 수행 후 동작");
	}
}
  • root-context를 이용했을때와 같은방식으로 anotation을 사용해주면된다.
  • 똑같이 인식하여 같은 결과를 확인 할 수 있다.

    [공통로그 - LogAdvice] 비지니스 로직 수행 전 동작
    [공통로그-LogAdvice] 비지니스 로직 수행 후 동작
    [공통로그 - LogAdvice] 비지니스 로직 수행 전 동작
    [공통로그-LogAdvice] 비지니스 로직 수행 후 동작

요약

  1. pom.xml - weaver
  2. servlet-context.xml - proxy
  • Advice 클래스 작성
  1. root-context.xml - bean, aspect

anotaion으로 시간 체크하기

adviceclass작성하기

@Component
@Aspect
public class AroundLog {

	@Pointcut("execution(* com.kh.junspring..*Impl*.*(..))")
	public void allPointCut() {
		
	}
	
	@Around(value = "allPointCut()")
	public Object aorundLogs(ProceedingJoinPoint pp) throws Throwable {
		//ProceedingJoinPoint는 JoinPoint를 상속받아 구현된 인터페이스
		//ProceedingJoinPoint를 사용하는 이유는 advice가 실행되는 시점을
		//프로그래밍 하기 위해서임
		StopWatch stopWatch = new StopWatch();
		//start
		stopWatch.start();
		Object obj = pp.proceed(); //pointcut 적용시점 메소드 proceed라는 메소드를 실행한다(이미 자바안에 들어있는메소드)
		//stop
		stopWatch.stop();
		//메소드가 실행되는 시간 출력
		String methodname = pp.getSignature().getName();//메소드명 구하는 코드
		System.out.println(methodname + "()메소드 수행에 걸린 시간 : " +stopWatch.getTotalTimeMillis()+"(ms)");
		
		return obj; //꼭 obj를 반환하지 않아도 된다! void도 가능
		
	}
}
  • 똑같은 방식으로 anotaion을 활용하여 준다.
  • 결과도 같은 방식으로 출력되는 것을 알수 있다.

    getTotalCount()메소드 수행에 걸린 시간 : 510(ms)
    printAllBoard()메소드 수행에 걸린 시간 : 9(ms)

profile
hello world

0개의 댓글