김영한 강사님의 강의를 보다가 나중에 복습하는데 갑자기 이 생각이 떠올랐다.
@Configuration 어노테이션은 이 클래스가 스프링의 설정 클래스라고 알려준다.
그 안에서 @Bean 어노테이션이 붙은 애들을 찾아서 빈으로 등록하게 되는데
만약에 @Configuration이 없이 @Bean만 붙어있으면 어떻게 될까?
처음에 gpt한테 물어봤었다.
내가 자주 애용하는 GPT는 @Configuration이 붙어있지 않으면 @Bean이 붙은 애들을 빈으로 등록하지 않는다고 설명했다.(3.5버전)
그런데 인터넷 찾아보니 내용이 또 달랐는데..
지금부터 정리를 해보자.
기존에는 @Configuration이 붙은 클래스를 찾아서 그 안에 @Bean이 붙은 애들을 스프링 컨테이너 빈으로 등록했다.
이 때 스프링은 CGLIB 라는 바이트코드 조작 라이브러리를 사용해서 @Configuration이 붙은 클래스를 상속받은 임의의 다른 클래스를 만들고, 그 다른 클래스를 스프링 빈으로 등록한 것이다!!!!(이해하기 어려우면 그냥 이렇게 등록한다고 알아두자)
그래서 그 다른 클래스가 싱글톤이 보장되도록 해준다.
그런데 그 역할을 해주는 @Configuration이 빠져버리면 어떻게 될까?
스프링 컨테이너에 빈으로 등록은 되지만 외부에서 그 빈을 여러 번 호출했을 경우 인스턴스가 계속 생성이 되는 것이다.
즉 싱글톤 보장을 못받게 되는 문제가 생긴다.
따라서 Bean을 싱글톤으로 관리하고자 한다면 @Configuration과 @Bean은 같이 사용하는 게 바람직하겠다.
반응형
'스프링 강의(인프런)' 카테고리의 다른 글
./gradlew clean build 에러 발생 (0) | 2023.07.06 |
---|---|
JSP와 서블릿의 차이 (0) | 2023.06.17 |
서블릿(Servlet)의 개념과 흐름 (0) | 2023.06.17 |
스프링 Bean이 중복됐을 경우 해결 방법 (0) | 2023.06.14 |