[본 포스팅은 인프런 스프링 핵심 원리 - 기본 편을 기반으로 작성하였습니다.]
강의를 듣다 보니 스프링 컨테이너에 등록된 Bean들이 싱글톤일 수밖에 없는지 알게 됐다.
먼저 스프링 컨테이너에 Bean들을 등록하여 사용해보고 출력해보면
이것과 같이 클래스 명에 ~CGLIB이 붙게 되어 출력이 된다.
이것은 내가 만든 클래스가 아닌 스프링이 CGLIB이라는 바이트코드 조작 라이브러리를 사용해서 AppConfig 클래스를 상속받아 임의의 다른 클래스를 만들고 그 다른 클래스를 스프링 빈으로 등록한 것이다.
(위 사진처럼 상속을 받고 스프링 컨테이너에서 임의의 다른 클래스를 생성!)
그리고 그 생성된 ~CGLIB의 예상 코드는 다음과 같다
- @Bean이 붙은 메서드마다 이미 스프링 빈이 존재하면 존재하는 빈을 반환하고, 스프링 빈이 없으면 생성해서 스프링 빈으로 등록하고 반환하는 코드가 동적으로 만들어진다.
- 덕분에 싱글톤이 보장되는 것이다.
참고 AppConfig@CGLIB은 AppConfig의 자식 타입이므로, AppConfig 타입으로 조회할 수 있다.
'JAVA > Spring' 카테고리의 다른 글
[Spring] Bean 스코프의 종류와 사용법 (싱글톤, 프로토타입) (1) | 2022.09.02 |
---|---|
[Spring] 롬복(Lombok) 설치 및 간단하게 사용 (feat. 최신 트렌드) (0) | 2022.09.02 |
[Spring] 스프링 컨테이너를 사용해야 하는 이유 (싱글톤 패턴의 문제점 해결) 그리고 주의점 (0) | 2022.09.01 |
[Spring] 기존 코드를 Spring으로 바꾸는 방법 (Configuration, Bean으로 찍먹) (0) | 2022.08.31 |
[Spring] AppConfig의 역할과 왜 사용되는지 정리 (0) | 2022.08.31 |