[스프링 핵심 원리 - 기본편] # 3. 스프링 컨테이너와 스프링 빈 #518
Develop-KIM
started this conversation in
동환
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
스프링 컨테이너 생성
ApplicationContext를 스프링 컨테이너라 하고, 인터페이스이다.AppConfig를 사용했던 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이다.ApplicationContext)를 만들어보자.new AnnotationConfigApplicationContext(AppConfig.class);ApplicationContext인터페이스의 구현체이다.스프링 컨테이너의 생성 과정
1. 스프링 컨테이너 생성

new AnnotationConfigApplicationContext(AppConfig.class)AppConfig.class를 구성 정보로 지정했다.2. 스프링 빈 등록

빈 이름
@Bean(name="memberService2")3. 스프링 빈 의존관계 설정 - 준비

4. 스프링 빈 의존관계 설정 - 완료

참고
스프링은 빈을 생성하고 의존관계를 주입하는 단계가 나누어져 있다.
그런데 자바 코드로 스프링 빈을 등록하면 생성자를 호출하면서 의존관계 주입도 한 번에 처리된다.
정리
스프링 컨테이너를 생성하고 설정(구성) 정보를 참고해서 스프링 빈을 등록하고 의존관계도 설정했다.
컨테이너에 등록된 모든 빈 조회
ac.getBeanDefinitionNames(): 스프링에 등록된 모든 빈 이름을 조회한다.ac.getBean(): 빈 이름으로 빈 객체(인스턴스)를 조회한다.getRole()로 구분할 수 있다.ROLE_APPLICATION: 일반적으로 사용자가 정의한 빈ROLE_INFRASTRUCTURE: 스프링이 내부에서 사용하는 빈스프링 빈 조회 - 기본
스프링 컨테이너에서 스프링 빈을 찾는 가장 기본적인 조회 방법
ac.getBean(빈이름, 타입)ac.getBean(타입)NoSuchBeanDefinitionException: No bean named 'xxxxx' available스프링 빈 조회 - 동일한 타입이 둘 이상
ac.getBeansOfType()을 사용하면 해당 타입의 모든 빈을 조회할 수 있다.스프링 빈 조회 - 상속 관계
Object타입으로 조회하면, 모든 스프링 빈을 조회한다.그림

BeanFactory와 ApplicationContext
BeanFactory
getBean()을 제공한다.ApplicationContext
ApplicatonContext가 제공하는 부가기능

정리
다양한 설정 형식 지원 - 자바 코드, XML
애노테이션 기반 자바 코드 설정 사용
new AnnotationConfigApplicationContext(AppConfig.class)AnnotationConfigApplicationContext클래스를 사용하면서 자바 코드로된 설정 정보를 넘기면 된다.XML 설정 사용
아직 많은 레거시 프로젝트 들이 XML로 되어 있고, XML을 사용하면 컴파일 없이 빈 설정 정보를 변경할 수 있는 장점이 있다.
GenericXmlApplicationContext를 사용하면서xml설정 파일을 넘기면 된다.XmlAppConfig 사용 자바 코드
xml 기반의 스프링 빈 설정 정보
appConfig.xml스프링 설정 정보와 자바 코드로 된AppConfig.java설정 정보를 비교해보면 거의 비슷하다는 것을 알 수 있다.스프링 빈 설정 메타 정보 - BeanDefinition
BeanDefinition이라는 추상화가 있다.BeanDefinition을 빈 설정 메타정보라 한다.@Bean,<bean>당 각각 하나씩 메타 정보가 생성된다.더 깊은 코드

AnnotationConfigApplicationContext는AnnotatedBeanDefinitionReader를 사용해서AppConfig.class를 읽고BeanDefinition을 생성한다.GenericXmlApplicationContext는XmlBeanDefinitionReader를 사용해서appConfig.xml설정 정보를 읽고BeanDefinition을 생성한다.BeanDefinition을 생성하면 된다.BeanDefinition 살펴보기
BeanDefinition 정보
정리
하지만 실무에서 BeanDefinition을 직접 정의하거나 사용할 일은 거의 없다.
BeanDefinition으로 추상화해서 사용하는 것 정도만 이해하면 된다.
All reactions