스프링 AOP 실무 주의사항 문제1

justindevcode·2024년 4월 11일
0

스프링 AOP

목록 보기
2/22
post-thumbnail
post-custom-banner

스프링 AOP 실무 주의사항 문제1

스프링 AOP의 첫번째 문제는 함수내부호출의 경우 이다.

public class CallServiceV0 {
 public void external() {
 log.info("call external");
 internal(); //내부 메서드 호출(this.internal())
 }
 public void internal() {
 log.info("call internal");
 }
}


@Aspect
public class CallLogAspect {
 @Before("execution(* hello.aop.internalcall..*.*(..))")
 public void doLog(JoinPoint joinPoint) {
 log.info("aop={}", joinPoint.getSignature());
 }
}

external, internal모두 AOP로 프록시 등록해서 스프링 빈에는 둘의 프록시 객체가 등록되게된다.
하지만 external에서 함수 내부에서 자신의 클래스의 internal을 호출하게되면 스프링빈의 프록시 internal이 아니라 날것의 this.internal이 호출되기 때문에
internal에는 AOP가 적용이 되지않는 문제가 있다.

만약 AspectJ를 직접 사용하면 public void internal()함수에 코드안에 직접 코드를 쑤셔박아 넣는 방식을 사용할 수 있기때문에 이런 문제가 안생길 수 있지만 너무 복잡하기에 다른 해결책을 사용한다.

그해결책은 다음시간에

profile
("Hello World!");
post-custom-banner

0개의 댓글