인프런 김영한님의 스프링 핵심원리 - 기본편을 학습하고 정리한 내용입니다. 학습 목적의 정리이며 모든 강의 내용을 정리하진 않습니다. 틀린 부분 지적해주시면 감사하겠습니다.
스프링으로 전환
ApplicationContext에서 (@Configuration이 적힌) 구성정보 활용하여 컨테이너 생성
- @Configuration : 해당 어노테이션을 달아주면 해당 구성 정보를 사용한다. 해당 강의에서는 AppConfig에 달아줬다.
- @Bean 이 표시된 메서드들을 모두 호출해서 반환된 객체들을 스프링 컨테이너에 등록
- getBean으로 꺼내와서 Service를 사용한다.
스프링 컨테이너
ApplicationContext를 보통 스프링 컨테이너라고 한다. BeanFactory는 그 위에 최상위 클래스인데, 사실 직접 사용하는 경우가 거의 없으므로 ApplicationContext가 스프링 컨테이너라고 이해하면 된다.
요약하면 BeanFactory는 getBean()을 제공한다. ApplicationContext는 거기에 편리한 부가기능을 제공한다.
즉, ApplicationContext 빈 관리기능 + 편리한 부가기능을 가졌고, 부가기능은 주로 메시지소스를 활용한 국제화, 환경변수, 애플리케이션 이벤트, 편리한 리소스 조회가 있다.
ApplicationContext도 인터페이스이다. 다음과 같이 구성정보와 함께 지정하여 스프링 컨테이너를 생성한다.
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
- 컨테이너 내부에 빈 저장소가 존재하는데, 구성정보를 활용해 스프링 빈을 등록한다
- 참고로 빈 생성과 의존관계 주입이 분리되어 진행된다.
Bean의 조회
- 빈의 이름은 항상 다른 이름으로 부여하자. 겹치면 덮어씌워지거나, 경고를 받는다. 이름변경도 가능하지만 웬만하면 default를 사용하자.
- ac.getBean(빈 이름, 타입)
- 구체적인 클래스를 타입으로 지정 가능(불가피할때 사용)
- 조회 대상 빈이 없다면?
- NoSuchBeanDefinitionException 발생
- ac.getBean(타입)
- 타입만 입력하기때문에, 같은 타입이 여러 개 존재할 경우 문제 -> NoUniqueBeanDefinitionException 발생
- 상속 관계
- 부모 조회 시 자식 타입도 줄줄이 조회된다.
- Object로 조회 시 모든 스프링 빈 조회
- getBeansOfType()
- 부모 조회 시, 혹은 해당 타입이 여러개 일때 한꺼번에 조회
- Map<String , 조회 타입> 형식
- BeanDefinition
- 인터페이스 , 스프링 빈 설정 메타 정보
- 다양한 설정 정보를 BeanDefinition추상화해서 사용
- 자바 설정은 빈 팩토리를 활용
- xml은 직접 스프링빈을 컨테이너에 등록 (요즘 안쓴다) -> 장점 : 컴파일 없이 빈 설정 정보 변경 가능
- Bean 당 메타 정보 생성
'Spring > 스프링 핵심 원리 기본편' 카테고리의 다른 글
스프링 핵심 원리 기본편 - 컴포넌트 스캔 (0) | 2022.09.06 |
---|---|
스프링 핵심원리 기본편 - 싱글톤 컨테이너 (0) | 2022.09.05 |
스프링 핵심 원리 기본편 - 주문과 할인 도메인 설계, IoC (0) | 2022.08.30 |
스프링 핵심 원리 기본편 - SOLID란 무엇인가? (0) | 2022.08.30 |
댓글