우주먼지
article thumbnail

💡 @Configuration과 Singleton

  • @Configuration은 Singleton을 위해서 존재함
  • AppConfig 파일에서 보면 memberRepository 객체가 2번 생성되는것 처럼 보인다
  • 그럼 Singleton이 깨지는 건가? 하고 생각할 수 있으므로 테스트를 통해 알아보자

orderServiceImpl,memberServiceImpl에 테스트용 코드 추가
주소값 일치 = 호출된 빈은 모두 동일한 빈이다


💡 바이트코드 조작

 

  • 스프링 컨테이너는 싱글톤 레지스트리다
  •  따라서 스프링 컨테이너는 스프링 빈이 싱글톤이 되도록 보장해줘야햠
  • 그때 사용하는것이 클래스의 바이트코드를 조작하는 라이브러리 사용
  • 모든 비밀은 @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
profile

우주먼지

@o귤o

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그