
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
1. root-context.xml에 작성
AOP기능을 활성화하는 설정으로 AspectJ를 기반으로 자동 프록시(Proxy) 생성을 지원해준다.
이 설정을 추가하면 AOP에서 정의한 공통 기능(Aspect)이 적용 대상(Advice)에 자동으로 연결된다. 스프링이 빈(Bean)을 생성할 때, 해당 빈이 AOP 대상인지 확인하고 자동으로 프록시를 만들어서 Aspect를 적용해준다.

2. aop패키지를 생성하고, SampleAdvice 클래스 만들기
<!-- AOP 사용하기 위한 라이브러리 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<!-- AspectJ -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${org.springframework-version}</version>
</dependency>
3. AOP를 사용하려면 라이브러리에 등록을 해야겠죠? pom.xml에 라이브러리를 추가 합니다.

4. 아까 만들어둔 샘플 advice에 테스트를 해본다. 브라우저를 실행해보면 콘솔창에 정상적으로 로거가 잘 뜬다.

5. BoardTimeCheckAdvice 이름으로 클래스 하나 더 만들기.
여기서는 로드 될 때 걸리는 시간이 얼마인지 체크 해보기 위해 생성했다.
@Component
@Aspect
public class BoardTimeCheckAdvice {
private static final Logger logger = LoggerFactory.getLogger(SampleAdvice.class);
// 시작과 끝 두번을 체크하는 Around
@Around("execution(* com.myaws.myapp.service.BoardService*.*(..))")
public Object timelog(ProceedingJoinPoint pjp) throws Throwable {
Object result = null;
logger.info("시작하는 aop");
logger.info("매개변수: " + Arrays.toString(pjp.getArgs()));
long startTime = System.currentTimeMillis();
// 해당되는 조인포인트를 진행시킨다.
result = pjp.proceed();
long endTime = System.currentTimeMillis();
logger.info("끝나는 aop");
// 시간이 얼마나 걸리는지 계산
long durTime = endTime - startTime;
logger.info(pjp.getSignature().getName()+"걸린시간: " + durTime);
return result;
}
}
6. 요렇게 로거 체크