Aspect(애스펙트) : AOP의 단위가 되는 횡단 관심사
횡단 관심사(Cross-Cutting Concern) :
핵심(core) 비즈니스 로직과 다소 거리가 있지만,
여러 모듈에서 공통적으로 반복적인 처리를 요구하는 내용
횡단 관심사 분리(Separation of Cross-Cutting Concern) :
횡단 관심사에 해당하는 부분(부수적인 것)을 분리해서 한 곳으로 모은다
@Component :
@Aspect
랑 짝궁
component-scan시 ‘여기 봐주세요’라는 의미
JoinPoint :
어드바이스(특정 조인 포인트(무언가 변화가 생겼을 때)에서 실행되는 코드
횡단 관심사를 실제로 구현
Advice : 어떤 부가 기능을 언제 사용할지 정의
AOP 대상 : 로그, 보안, 트랜잭션, 에러
@Before("execution(* kr.or.ddit.*..*(..))")
public void startLog(JoinPoint jp) {
log.info("startlog");
log.info("startlog : {}", jp.getSignature());
// 출력값 예 : kr.or.ddit.service.BoardService.register(BoardVO)
log.info("startlog : {}", Arrays.toString(jp.getArgs()));
// 출력값 예 : [BoardVO (boardNo=1, title=햄스터)]
}
포인트컷 표현식 : *..*(..)
*
: 임의의 1개의 리턴 타입
..
: 임의의 0개 이상
execution : 포인트컷(대상(메소드)을 선별하는 것) 지정자 (대상 : 메인 코어)
.getSignature()
:.getArgs()
:@AfterReturning()
:@AfterThrowing()
:@Around()
:트랜잭션 :
데이터베이스를 변경(I/U/D)하기 위해 수행되어야 할 논리적 단위
여러개의 sql로 구성됨
ACID
@ControllerAdvice :
@ExceptionHandler :