본문 바로가기
Spring/AOP

스프링 AOP 주의점1 - 내부 호출과 대안

by 정재익 2026. 1. 23.

내부호출

AOP 적용하려면 프록시를 통해서 대상 객체를 호출해야함

프록시에서 먼저 어드바이스를 호출하고 이후에 대상 객체 호출

프록시 안거치고 대상 객체 직접호출하면 AOP 적용 X

 

스프링에서는 AOP대상은 프록시를 스프링빈으로 등록해서 직접 호출은 거의 안일어남

근데 대상 객체 내부에서 메서드 호출 발생하면 프록시를 안거치고 대상 객체 직접 호출하게 됨

그러니까 프록시가 타겟의 메서드 호출하면 그 타겟이 타겟안에 있는 메서드호출하면 적용이안됨 

자바에서 메서드 앞에 별도의 참조가 없으면 this로 자기자신의 인스턴스를 가리킴

결과적으로 자신의 내부 메서드를 호출하게 되는데 여기서 this는 실제 대상 객체의 인스턴스라 AOP가 적용이안되는 것

 

대안1 자기자신 주입

this가 아니라 자기자신을 주입해서 다시 프록시로 돌아오는 것 이때 생성자를 쓰면 안되고 세터주입을 해야함

 

 

대안 2 지연 조회

스프링 빈을 지연해서 조회하는 법

애플리케이션컨텍스트에서 직접 빈을 꺼내옴 근데 애플리컨텍스트는 너무 거대함 오브젝트프로바이더를 이용하는 것

오브젝트프로바이더는 객체를 스프링 컨테이너에서 조회하는 걸 빈 생성 시점이 아니고 실제 사용시점으로 지연함

 

 

대안 3 구조 변경

내부호출이 발생하지 않도록 구조 자체를 변경하는 것

클래스를 분리시켜 내부호출을 외부호출로 변경

'Spring > AOP' 카테고리의 다른 글

스프링 AOP 주의점2 - 프라이빗  (0) 2026.01.23
빈 후처리기와 스프링이 프록시를 등록하는 방법  (0) 2026.01.23
Aspect  (0) 2026.01.23
프록시팩토리  (0) 2026.01.23
스프링 AOP  (0) 2025.12.13