본문 바로가기
spring

Spring Container의 생성 과정

by 김선지 2024. 5. 23.
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

1. 해당 구문을 통해서 AppConfig의 정보를 준다.

 

 2. 스프링 컨테이너가 만들어지면서 @Bean 어노테이션이 붙은 메소드의 이름을 빈 이름으로 설정하고 빈 객체를 리턴값으로 설정한다. 이렇게 스프링 빈을 등록한다.

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

3. 스프링 빈이 의존관계 설정을 해준다. - Configuration의 설정 정보를 참고해서 스프링 컨테이너가 DI를 해준다.

싱글톤을 준수한다.

@Bean(name="some_name")으로 등록 가능

 

싱글톤 구현

@Configuration을 붙이면 바이트코드를 조작해서 AppConfig를 부모 요소로 상속받는 CGLIB객체를 만든다. 이를 통해 스프링 컨테이너에 객체에 등록되어 있으면 해당 빈을 사용하고 없으면 기존 로직을 호출해서 빈을 생성하고 스프링 컨테이너에 등록한다.

 

@Configuration이 없고 @Bean만 있다면?

바이트코드를 사용한 CGLIB객체를 만들지 않고, 그러면서 객체를 사용할 때마다 새로운 Bean이 만들어지고 호출된다.

즉, 싱글톤이 깨진다.

 

스프링 설정정보에는 무조건 넣어야한다.!!!