비지니스 로직 등의 핵심 기능 (Core Concerns)들과 로깅, 보안 , 트랜잭션 처리 등
핵심 기능을 도와주는 부가기능 (Cross-cutting Concerns)으로 분리해서 모듈화 하는 것
핵심기능, 비즈니스 로직으로만 구성되어 있음
로깅, 보안 등의 기능을 하는 부가 기능
부가기능을 어디에 적용시키는지
Weaving
런타임 때 Aspect(Adviser)를 핵심 기능에 끼워넣는 것
// https://mvnrepository.com/artifact/org.springframework/spring-aop
implementation group: 'org.springframework', name: 'spring-aop', version: '6.0.9'
@EnableAspectJAutoProxy
@Aspect
@Component
public class LoggingAspect {
@Before("execution(* com.test.service.*.get*(..)) ||" +
"execution(* com.test.service.*.post*(..))")
public void loggerBefore(JoinPoint joinPoint) {
System.out.println("get 또는 post로 시작하는 메서드가 시작됩니다.");
}
@After("execution(* com.test.service.*.get*(..))")
public void loggerAfter() {
System.out.println("get으로 시작하는 메서드가 끝났습니다.");
}
@Around("execution(* com.test.controller.UserController.*(..))")
public Object loggerAround(ProceedingJoinPoint pjp) throws Throwable {
...
Object result = pjp.proceed(); // 메소드 실행
...
return result;
}
}
종류 | 기능 |
---|---|
@PointCut | 타겟을 직접 정의할 수 있음 (value, argNames) |
@Before | 타겟이 실행되기 전 어드바이스 기능 수행 (value, argNames) |
@After | 타겟이 실행된 후 어드바이스 기능 수행 (결과에 상관 x) return 값을 가져올 수 있음 (value, argNames) |
@AfterReturning | 타겟이 성공적으로 리턴값을 반환한 경우 어드바이스 기능 수행 (value, returning, pointcut, argNames) |
@AfterThrowing | 타멧 메소드 수행 중 예외 발생 시 어드바이스 기능 수행 (value, throwing, pointcut, argNames) |
@Around | 타켓 호출 전 / 후 어드바이스 기능 수행 (value, argNames) |