스프링/1. 스프링 핵심 원리

28강. @Configuration가 싱글톤을 보장해주는 방식

sdafdq 2023. 7. 20. 21:36
@Configuration
public class AppConfig {
    @Bean
    public MemberService memberService(){
        return new MemberServiceImpl(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }

    @Bean
    public OrderService orderService(){
        return new OrderServiceImpl(memberRepository(), discountPolicy());
    }

    @Bean
    public DiscountPolicy discountPolicy() {
        return new RateDiscountPolicy();
    }
}

쌩 자바코드를 spring이 바꿀 수 있는것도 아니고 어떻게 싱글톤을 보장해 줄까?

 

 

public class ConfigurationTest {
    @Test
    @DisplayName("ConfigurationTest")
    public void test(){
        ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);

        System.out.println("AppConfig = " + ac.getBean(AppConfig.class));
    }
}

AppConfig 출력

 

AppConfig = co m.example.core.AppConfig$$SpringCGLIB$$0@2796aeae

 

?? SpringCGLIB 저거는?

 

AppConfig, 

@Configuration 이거 붙어있는 클래스는 spring이 저걸 상속받아서 새로 자기가 뭐 기능 추가한 class를 만듦.

그걸 Bean으로 등록하는거

CGLIB이란 바이트 조작 라이브러리 

 

 

그래서, 한번 객체로 만든 것은 그걸 저장해뒀다가, 호출될 때마다 저장되어있는지 확인 한 후 없으면 내가 친 것처럼 new 해서 만들고 있으면 넘어가는 듯.

 

 

 

@Configuration 이거까지 해야 싱글톤 보장을 해 줌

'스프링 > 1. 스프링 핵심 원리' 카테고리의 다른 글

31강. 필터  (0) 2023.07.21
29강. 컴포넌트 스캔  (0) 2023.07.20
27강. 스프링 컨테이너와 싱글톤  (0) 2023.07.18
26강. BeanDefinition  (0) 2023.07.18
25강. XML로 스프링  (0) 2023.07.17