[Spring] 13. @Configuration 어노테이션에 대해서 설명해주세요.
zbqmgldjfh opened this issue · 1 comments
zbqmgldjfh commented
zbqmgldjfh commented
@configuration의 효과
- Bean을 등록할 때 싱글톤(singleton)이 되도록 보장해준다. 따라서 스프링 컨테이너에서 싱글톤 Bean을 관리할 수 있게 됨.
@configuration을 추가한 AppConfig 설정 파일의 내용물들이 빈으로 등록된다. 또한 AppConfig도 같이 빈으로 등록이 되죠.
해당 @configuration이 붙은 AppConfig를 ApplicationContext에서 찾아오면, 클래스 명에 xxxCGLIB가 붙으면서 상당히 복잡해진 것을 볼 수 있다.
만든 클래스가 아니라 스프링이 CGLIB라는 바이트코드 조작 라이브러리를 사용해서 AppConfig 클래스를 상속받은 임의의 Proxy 클래스를 만들고, 그 다른 클래스를 스프링 빈으로 등록한 것이다!
원래의 AppConfig를 상속한 proxy AppConfig가 빈으로 등록되며, 싱글톤이 되도록 보장해 준다!
AppConfig@CGLIB 예상 코드는 다음과 같다.
@Bean
public MyBean myBean() {
if (myBean이 이미 스프링 컨테이너에 등록되어 있으면?) {
return 스프링 컨테이너에서 찾아서 반환;
} else { //스프링 컨테이너에 없으면 기존 로직을 호출해서 myBean을 생성하고 스프링 컨테이너에 등록
return 생성 후 반환
}
}
@bean이 붙은 메서드마다 이미 스프링 빈이 존재하면 존재하는 빈을 반환하고, 스프링 빈이 없으면 생성해서 스프링 빈으로 등록하고 반환하는 코드가 동적으로 만들어진다. 덕분에 싱글톤이 보장되는 것이다.