💡 @Configuration과 Singleton
- @Configuration은 Singleton을 위해서 존재함
- AppConfig 파일에서 보면 memberRepository 객체가 2번 생성되는것 처럼 보인다
- 그럼 Singleton이 깨지는 건가? 하고 생각할 수 있으므로 테스트를 통해 알아보자
💡 바이트코드 조작
- 스프링 컨테이너는 싱글톤 레지스트리다
- 따라서 스프링 컨테이너는 스프링 빈이 싱글톤이 되도록 보장해줘야햠
- 그때 사용하는것이 클래스의 바이트코드를 조작하는 라이브러리 사용
- 모든 비밀은 @Configuration을 조작한 AppConfig에 있다
- 아래의 코드 예시를 보자
- AnnotationConfigApplicationContext에 파라미터로 넘긴 값은 스프링 빈으로 등록된다, 즉 AppConfig도 빈이 됨
- AppConfig의 빈을 조회해서 클래스 정보를 출력해보면 아래와 같이 나오는데,
순수 클래스였다면 class hello.core.AppConfig 만 나와야한다 - 근데 예상과는 다르게 xxxCGLIB 등이 붙으면서 복잡해보인다.
- 이건 내가 만큰 클래스가 아니라 스프링이 CGLIB이라는 바이트코드 조작 라이브러리를 사용해서
AppConfig 클래스를 상속받은 임의의 클래스를 만들고, 그 클래스를 스프링 빈으로 등록한 것 - 그 임의의 다른클래스가 바로 싱글톤이 보장되도록 해줌
'Inflearn 강의 > Spring 핵심원리 기본' 카테고리의 다른 글
8 - 의존관계 자동 주입 & 옵션 처리 (0) | 2022.10.18 |
---|---|
7 - Component Scan (0) | 2022.10.18 |
5 - Singleton Container with Stateless (0) | 2022.10.17 |
4 - Singleton Pattern (0) | 2022.10.17 |
3 - Bean 조회 (0) | 2022.10.17 |