Error

Spring MVC 프로젝트 Annotation으로 Aspect가 적용되지 않을때(AOP)

디벨로프드림 2018. 4. 26. 20:24
반응형

package com.myboard.aop;


import java.sql.Date;


import org.aspectj.lang.ProceedingJoinPoint;

import org.aspectj.lang.annotation.Around;

import org.aspectj.lang.annotation.Aspect;

import org.aspectj.lang.annotation.Pointcut;

import org.springframework.context.annotation.EnableAspectJAutoProxy;

import org.springframework.stereotype.Component;

import org.springframework.util.StopWatch;


@Aspect

@Component

public class AroundExample {

public AroundExample() {

System.out.println("/////////////////Asepect생성/////////Asepect생성////////////Asepect생성////////Asepect생성");

}

@Pointcut("execution(* com.myboard.web.controller.BoardController.postInsert(..))")  

public void insertBoard(){}//pointcut name  

      

    @Around("insertBoard()")//applying pointcut on before advice  

    public Object myadvice(ProceedingJoinPoint pjp) throws Throwable   

    {  

        StopWatch watch = new StopWatch();

        watch.start();

        Object obj=pjp.proceed();  

        watch.stop();

        Double elapsedTimeBySecond = watch.getTotalTimeSeconds();

        System.out.println("──────────────────────────insertBoard 메소드 소요시간 = "+elapsedTimeBySecond+"초───────────────────────────");

        return obj;  

    }  


}



위와같은 Aspect를 만들고 insert 쿼리 메소드중 하나에 Around Advice를 통해 시간체크를 하려고 했다

그러나 콘솔창에 로그가 찍히지 않았다

분명 Bean으로 올라가긴 갔는데,,,
("/////////////////Asepect생성/////////Asepect생성////////////Asepect생성////////Asepect생성" 
이로그는 뜸)
 



해결

알고보니 @EnableAspectJAutoProxy 을 달아줘야 되는것이었다




수정된 코드



@EnableAspectJAutoProxy //←이 부분

@Aspect

@Component

public class AroundExample {

public AroundExample() {

System.out.println("/////////////////Asepect생성/////////Asepect생성////////////Asepect생성////////Asepect생성");

}

@Pointcut("execution(* com.myboard.web.controller.BoardController.postInsert(..))")  

public void insertBoard(){}//pointcut name  

      

    @Around("insertBoard()")//applying pointcut on before advice  

    public Object myadvice(ProceedingJoinPoint pjp) throws Throwable   

    {  

        StopWatch watch = new StopWatch();

        watch.start();

        Object obj=pjp.proceed();  

        watch.stop();

        Double elapsedTimeBySecond = watch.getTotalTimeSeconds();

        System.out.println("──────────────────────────insertBoard 메소드 소요시간 = "+elapsedTimeBySecond+"초───────────────────────────");

        return obj;  

    }  


}





정상 실행 화면


반응형