@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 |