AOP 프록시와 내부 호출 문제 - 자기 자신 주입

박찬우·2024년 2월 17일
0

스프링

목록 보기
77/88

자기 자신 주입

  • 자기 자신을 의존관계 주입 받는 것
  • 스프링 부트 2.6부터는 순환 참조를 기본적으로 금지하도록 정책이 변경 되어 아래와 같은 옵션을 추가해 줘야 한다
    • application.properties
      • spring.main.allow-circular-references=true
  • 생성자 주입시 오류가 발생한다. 본인을 생성하면서 주입해야 하기 때문에 순환 사이클이 만들어진다. 반면에 수정자 주입은 스프링이 생성된 이후에 주입할 수 있기 때문에 오류가 발생하지 않는다.

예)

@Slf4j
@Component
public class CallServiceV1 {

    private CallServiceV1 callServiceV1;

    @Autowired
    public void setCallServiceV1(CallServiceV1 callServiceV1) {
    	// 스프링에서 프록시 객체로 만들었기 때문에 프록시 객체를 주입 받음
        this.callServiceV1 = callServiceV1;
    }

    public void external() {
        log.info("call external");
        callServiceV1.internal(); //외부 메서드 호출
    }

    public void internal() {
        log.info("call internal");
    }

}

  • 결과
profile
진짜 개발자가 되어보자

0개의 댓글