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이 만들어지고 호출된다.
즉, 싱글톤이 깨진다.
스프링 설정정보에는 무조건 넣어야한다.!!!
'spring' 카테고리의 다른 글
에디터 글 DB 저장, 이미지 base 64인코딩 데이터 DB저장 (0) | 2024.05.29 |
---|---|
@AutoConfig, @ComponentScan, @Autowired, Filter (0) | 2024.05.28 |
라이브러리 vs 프레임워크, 정 동적 객체 인스턴스 의존 관계 (0) | 2024.05.23 |
Spring Framework, 객체지향, SOLID (0) | 2024.05.20 |
AOP (0) | 2024.05.19 |