AOP는 관점 지향 프로그래밍으로
DI가 의존성 주입이라면
AOP는 로직 주입이라고 할 수 있습니다.
이체, 입출금, 이자계산 로직에서 전부
로깅, 보안, 트랜잭션이 반복해서 동작하는것을 알 수 있습니다.
이것을 횡단 관심사라고 합니다.
- 프록시 패턴으로 관심사의 로직 주입 설정대로 실행됩니다.
- 인터페이스 기반입니다.
- 메서드에만 적용 가능?
- 런타임 기반입니다.
AOP 적용, 로직 주입 방법
로직을 주입할 수 있는 곳은 총 5군데가 있습니다.
AOP 적용 방법
- @Aspect : Class에 사용하면 AOP에서 사용하게됩니다.
- JoinPoint : 호출된 객체의 메서드입니다.
- JoinPoint를 활용하여 메서드의 정보를 확인할 수 있습니다.
- @PointCut : 자르는 지점으로 Aspect의 적용 위치를정확히 지정합니다.
- 로직주입 메서드 5개와 같이 사용됩니다.
로직 주입 메서드
- Before : 메서드 시작전
- After : 메서드 종료 후
- AfterReturning : 메서드 정상 종료 후
- AfterThrowing : 메서드 예외가 발생하고 종료 후
- Around : 메서드 전 구역
장점
한 클래스에 공통 로직을 AOP를 적용하여 핵심 로직만을 남겨
단일 책임의 원칙 SRP을 적용 할 수 있습니다.
즉, 횡단 관심사(공통 로직)는 신경쓰지 않고 핵심 관심사에만 집중하여 개발할 수 있습니다.
적용 코드
Vaildation 검사를 적용한 AOP의 코드입니다.
@Component
@Aspect
public class ValidationHandlerAspect {
@Pointcut("@annotation(org.springframework.web.bind.annotation.PostMapping)")
public void postMapping(){
}
@Pointcut("@annotation(org.springframework.web.bind.annotation.PutMapping)")
public void putMapping(){
}
@Before("postMapping() || putMapping()")
public void before(JoinPoint joinPoint) {
for (Object arg : joinPoint.getArgs()) {
if (arg instanceof BindingResult) {
BindingResult br = (BindingResult) arg;
if (br.hasErrors()) {
throw new BindingException(br.getFieldError().getDefaultMessage());
}
}
}
}
}
참고
스프링 입문을위한 자바 객체 지향의 원리와 이해
'Spring' 카테고리의 다른 글
[Spring] Interceptor를 사용해 Security를 구현해보자 (Filter vs Interceptor) (0) | 2023.12.29 |
---|---|
[Jsp] <form:errors> 태그로 Validation 체크 (0) | 2023.12.29 |
IoC 와 DI 그리고 Bean (1) | 2023.10.11 |
싱글톤 패턴 (0) | 2023.09.22 |
디자인 패턴 (1) | 2023.09.22 |