관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어 보고 그 관점을 기준으로 각각 모듈화(하나의 단위로 묶음)하겠다는 것
예를 들어 햑심적인 관점은 결국 우리가 적용하고자 하는 핵심 비즈니스 로직이 됨. 또한 부가적인 관점은 핵심 로직을 실행하기 위해서 행해지는 데이터베이스 연결, 로깅, 파일 입출력 등이 있음
스프링 @AOP를 사용하기 위해서는 다음과 같은 의존성 추가가 필요함
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
package mul.cam.a.aop;
import java.util.Date;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
/*
* AOP(Aspect Oriented Programming) : 관점지향
* 목적 : 감시자
*/
@Aspect
public class AopProc {
//log,session검사
//controller패키지 안에 있는 모든 프로젝트와 함께함
@Around("within(mul.cam.a.controller.*) or within(mul.cam.a.dao.*.*)")
public Object loggerAop(ProceedingJoinPoint joinpoint) throws Throwable{
//logger - 신호를 받고
String signatureStr = joinpoint.getSignature().toShortString();
try {
Object obj = joinpoint.proceed(); //실행시 controller진입
System.out.println("AOP log:" + signatureStr + "메소드 실행" + new Date());
return obj;
}finally {
//System.out.println("실행 후 : " + System.currentTimeMillis());
}
}
}