Next-Squad/Interview-Question

[Spring] 13. @Configuration 어노테이션에 대해서 설명해주세요.

zbqmgldjfh opened this issue · 1 comments

@configuration 어노테이션에 대해서 정리하기

키워드

Spring, Spring Configuration, @Configuration

@configuration의 효과

  • Bean을 등록할 때 싱글톤(singleton)이 되도록 보장해준다. 따라서 스프링 컨테이너에서 싱글톤 Bean을 관리할 수 있게 됨.

@configuration을 추가한 AppConfig 설정 파일의 내용물들이 빈으로 등록된다. 또한 AppConfig도 같이 빈으로 등록이 되죠.
해당 @configuration이 붙은 AppConfig를 ApplicationContext에서 찾아오면, 클래스 명에 xxxCGLIB가 붙으면서 상당히 복잡해진 것을 볼 수 있다.

만든 클래스가 아니라 스프링이 CGLIB라는 바이트코드 조작 라이브러리를 사용해서 AppConfig 클래스를 상속받은 임의의 Proxy 클래스를 만들고, 그 다른 클래스를 스프링 빈으로 등록한 것이다!

이를 그림으로 보면 다음과 같습니다.
image

원래의 AppConfig를 상속한 proxy AppConfig가 빈으로 등록되며, 싱글톤이 되도록 보장해 준다!

AppConfig@CGLIB 예상 코드는 다음과 같다.

@Bean
public MyBean myBean() {
    if (myBean이 이미 스프링 컨테이너에 등록되어 있으면?) { 
        return 스프링 컨테이너에서 찾아서 반환;
    } else { //스프링 컨테이너에 없으면 기존 로직을 호출해서 myBean을 생성하고 스프링 컨테이너에 등록 
        return 생성 후 반환
    } 
}

@bean이 붙은 메서드마다 이미 스프링 빈이 존재하면 존재하는 빈을 반환하고, 스프링 빈이 없으면 생성해서 스프링 빈으로 등록하고 반환하는 코드가 동적으로 만들어진다. 덕분에 싱글톤이 보장되는 것이다.


출처

https://blogshine.tistory.com/551