- 빈 이름과 반환되는 객체 타입을 통해 등록한다.
- 빈 이름은 항상 다른 이름을 부여해야 한다 (무시되거나 덮어버릴수 있음)
- 타입으로 조회시 같은 타입이 둘 이상 있으면, 중복 오류가 발생한다
- 따라서 빈 이름을 지정해줘야 한다
- 예) MemberRepository타입인 MemberRepository1, 2가 있으면
타입으로 조회시 1, 2 가 조회 되므로 1 또는 2 의 빈 이름을 설정해주어야 한다.
- 부모 타입으로 조회시 자식이 둘 이상 있으면 중복 오류가 발생한다
- 마찬가지로 빈 이름을 지정하면 된다
BeanFactory
- 스프링 컨테이너의 최상위 인터페이스다.
- 스프링 빈을 관리하고 조회하는 역할을 담당한다.
- getBean() 을 제공한다.
- 지금까지 우리가 사용했던 대부분의 기능은 BeanFactory가 제공하는 기능이다
ApplicationContext
- BeanFactory 기능을 모두 상속받아서 제공한다.
스프링 빈 설정 메타 정보 - BeanDefinition
- 역할과 구현을 개념적으로 나눈 것
- XML을 읽어서 BeanDefinition을 만들면 된다.
- 자바 코드를 읽어서 BeanDefinition을 만들면 된다.
- 스프링 컨테이너는 자바 코드인지, XML인지 몰라도 된다. 오직 BeanDefinition만 알면 된다.
- BeanDefinition 을 빈 설정 메타정보라 한다.
- @Bean 당 각각 하나씩 메타 정보가 생성된다
- AnnotationConfigApplicationContext 는 AnnotatedBeanDefinitionReader 를 사용해서 AppConfig.class 를 읽고 BeanDefinition 을 생성한다.
- GenericXmlApplicationContext 는 XmlBeanDefinitionReader 를 사용해서 appConfig.xml 설정 정보를 읽고 BeanDefinition 을 생성한다.
- 새로운 형식의 설정 정보가 추가되면, XxxBeanDefinitionReader를 만들어서 BeanDefinition 을 생성하면 된다
'Spring > Basic' 카테고리의 다른 글
[Basic] ComponentScan (0) | 2024.04.05 |
---|---|
[Basic] [스프링 컨테이너] @Configuration (0) | 2024.04.05 |
[Basic] Log 출력 (0) | 2024.04.03 |
[Basic] IoC, DI, 컨테이너 (0) | 2024.04.03 |
[Basic] 좋은 객체 지향 설계 원칙의 적용 (0) | 2024.04.03 |