반응형
1. 스프링 컨테이너
- ApplicationContext = 스프링 컨테이너
- @Configuration annotation이 붙은 AppConfig 를 구성정보로 사용한다.
- AppConfig 에서 @Bean 어노테이션이 뭍은 메소드를 모두
호출해서 반환된 객체를 스프링 컨테이너에 등록한다B. 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다.
- 따라서 AppConfig 에서 객체를 찾아오는 대신, 스프링 컨테이너에서 필요한 스프링 빈(객체)를 찾아야 한다.
AppConfig에서 MemberService 의 구현체를 반환하는 메소드
applicationContext.getBean(<메소드 이름>, 반환받을 클래스 타입) 함수로 스프링을 받아온다.
2. 스프링 컨테이너 생성
- 스프링 컨테이너가 생성되는 과정
- ApplicationContext 는 스프링 컨테이너이다.
- 그리고 ApplicationContext 는 인터페이스이다.
- 즉, 다형성이 적용된 객체이다.
- 어노테이션 기반의 자바 설정 클래스로 만들기
- 구현체
- 구현체
- BeanFactory 와 ApplicationContext
- BeanFactory
- 스프링 컨테이너의 최상위 인터페이스
- 스프링 빈을 관리하고 조회하는 역할.
- ApplicationContext 는 이 BeanFactory를 상속받아서 구한 구현체이다.
- ApplicationContext
- BeanFactory의 기능을 모두 상속받았다.
- 애플리케이션 개발을 위한 부가 기능이 추가 됨.
- 부가 기능
- 메시지 소스를 활용한 국제화 기능 (한국에서 들어오면 한국어로, 영어권이면 영어로 출력)
- 환경변수 (로컬, 개발, 운영 등을 구분해서 처리)
- 애플리케이션 이벤트 (이벤트를 발행하고 구독하는 모델)
- 편리한 리소스 조회 (파일, 클래스 패스, 외부에서 리소스를 편리하게 조회)
- BeanFactory
2 . 만드는 방법
- XML 기반으로 만들기
- GenericXmlApplicationContext 구현체 사용
- GenericXmlApplicationContext 구현체 사용
3. 스프링 컨테이너 생성 과정
- 구성 정보를 지정해준다.
- 스프링 컨테이너가 구성 정보를 참고해서 스프링 빈 저장소에 스프링 빈을 등록한다.
- 빈 이름 - 빈 객체의 키-값 쌍을 생성한다. (빈 이름: 메소드 이름으로 등록)
- 빈 이름은 별도로 지정할 수도 있다. @Bean(name=“hello”)
- 빈 이름은 별도로 지정할 수도 있다. @Bean(name=“hello”)
- 빈 이름
- 빈 이름은 메서드 이름을 사용한다.
- 빈 이름을 직접 부여할 수 있다.
- 빈 이름은 서로 달라야 한다.
- 빈 이름 - 빈 객체의 키-값 쌍을 생성한다. (빈 이름: 메소드 이름으로 등록)
- 스프링 빈 의존 관계 설정 - 준비
- 스프링 빈 의존 관계 설정 - 완료
- 스프링 컨테이너는 설정 정보를 참고해서 의존관계를 주입한다. (DI)
- 동적인 객체 인스턴스 의존관계를 모두 연결.
- 싱글톤 컨테이너 개념
- 스프링 컨테이너는 설정 정보를 참고해서 의존관계를 주입한다. (DI)
4. 스프링 빈 조회하기
- 테스트 코드 작성하기
1. getDefinitionNames()로 모든 빈의 이름 가져온 후, getBean으로 빈 가져오기
- getBeanDefinition(definitionName) 으로 definition 가져온 후, getRole()로 구분하기
- getBeanDefinition(definitionName) 으로 definition 가져온 후, getRole()로 구분하기
- 스프링 컨테이너에서 빈 조회하기
- 기본
- 메소드 이름, 객체 타입으로 조회
- 객체 타입으로만 조회
- 같은 타입이 여러 개라면 오류 발생. (NoUniqueBeanDefinitionException)
- 한 타입에 대해 여러 빈들을 한번에 조회 가능
- 구체 타입으로도 조회 가능
- 상속관계의 스프링 빈 조회
- 부모 타입으로 조회하면, 자손 타입도 모두 조회된다.
- 그래서 모든 객체들의 부모인 Object 객체를 조회하면, 모든 스프링 빈을 조회한다.
- 메소드 이름, 객체 타입으로 조회
5. 스프링 빈 메타데이터
- 스프링 컨테이너는 스프링 빈 메타데이터를 참고한다.
- 따라서 GenericXmlConfigApplicationContext 라서 xml을 봐야하든AnnotationConfigApplicationContext 라서 java code를 봐야하든 상관없이 추상화된 인터페이스에 의존한다: BeanDefinition, 스프링 빈 설정 메타데이터 라고 부른다.
- @Bean, <bean> 하나당 한개씩 메타데이터가 생성된다.
- 스프링 빈 메타데이터 리더가 xml 혹은 annotation 여부에 따라 맞게 파일을 읽어서 빈 메타데이터를 생성한다.
- how?
- ApplicationContext 구현체가 각각에 맞는 DefinitionReader를 갖고 있다. 그리고 그에 맞는 AppConfig 정보를 읽어서 BeanDefinition을 생성한다.
- 빈을 등록하는 방법
- xml 을 이용하는 방법은 직접 설정
- AppConfig (@Configuration) 을 이용하는 방법은 팩토리 메소드 사용.
- 외부에서 함수를 호출하기 때문.
반응형
'개발 > java' 카테고리의 다른 글
[Spring 기본] 5. 컴포넌트 스캔 (0) | 2024.01.06 |
---|---|
[Spring 기본] 4. 싱글톤 컨테이너 (0) | 2024.01.06 |
Input 찬찬히 뜯어보기. (BufferedReader와 InputStreamReader?) (0) | 2023.12.11 |
[Spring 기본] 2. 실제 코드에서의 스프링 프레임워크 핵심 원리 (0) | 2023.12.08 |
[Spring 기본] 1. 객체 지향 설계와 스프링 (4) | 2023.12.08 |