You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
스프링 컨테이너 생성
@Configuration을 사용해서 자동으로 빈을 등록하고, 해당 클래스를 파싱해서@Bean이 있는 메소드를 찾아서 빈을 생성해준다.📌 스프링 컨테이너를 부를 때
BeanFactory,ApplicationContext를 구분해서 이야기하지만,BeanFactory를 직접 사용하는 경우는 거의 없다. 따라서 일반적으로ApplicationContext를 스프링 컨테이너라고 한다.스프링 컨테이너의 생성 과정
1. 스프링 컨테이너 생성
2. 스프링 빈 등록
빈 이름
@Bean(name ="memberService2")📌 주의 : 빈 이름은 항상 다른 이름을 부여 해야 한다. 같은 이름을 부여하면, 다른 빈이 무시되거나, 기존 빈을 덮어버리거나 설정에 따라서 오류가 발생할 수 있다.
3. 스프링 빈 의존관계 설정 - 준비
4. 스프링 빈 의존관계 설정 - 완료
📌 스프링은 빈을 생성하고, 의존관계를 주입하는 단계가 나누어져 있다. 이렇게 자바 코드로 스프링 빈을 등록하면 생성자를 호출하면서 의존관계 주입도 한 번에 처리된다.
📍 정리 : 스프링 컨테이너를 생성하고, 설정 정보를 참고해서 스프링 빈을 등록하고, 의존관계를 설정했다.
컨테이너에 등록된 모든 빈 조회
@DisplayName애노테이션을 선언함으로써 테스트 클래스나 메소드 명이 아닌 사용자가 정의한 명칭으로 변경할 수 이는 기능을 제공한다.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
ApplicationContext가 제공하는 부가기능
📍 정리
다양한 설정 형식 지원 - 자바 코드, XML
애노테이션 기반 자바 코드 설정 사용
new AnnotationConfigApplicationContext(AppConfig.class)했던 것AnnotationConfigApplicationContext클래스를 사용하면서 자바 코드로된 설정 정보를 넘기면 된다.XML 설정 사용
GenericXmlApplicationContext를 사용하면서xml설정 파일을 넘기면 된다.XmlAppConfig 사용 자바 코드
xml 기반의 스프링 빈 설정 정보
appConfig.xml스프링 설정 정보와 자바 코드로 된AppConfig.java설정 정보를 비교해보면 거의 비슷하다는 것을 알 수 있다.스프링 빈 설정 메타 정보 - BeanDefinition
스프링이 이렇게 다양한 설정 형식을 지원하는 중심에는
BeanDefinition추상화가 있다.즉, 역할과 구현을 개념적으로 나눈 것이다.
BeanDefinition을 빈 설정 메타정보라고 한다.@Bean,<bean>당 각각 하나씩 메타 정보가 생성된다.스프링 컨테이너는 이 메타정보를 기반으로 스프링 빈을 생성한다.

코드 레벨로 조금 더 깊이 있게 보기

AnnotationConfigApplicationContext는AnnotatedBeanDefinitionReader를 사용해서AppConfig.class를 읽고BeanDefinition을 생성한다.GenericXmlApplicationContext는XmlBeanDefinitionReader를 사용해서appConfig.xml설정 정보를 읽고BeanDefinition을 생성한다.새로운 형식의 설정 정보가 추가되면, XxxBeanDefinitionReader 를 만들어서
BeanDefinition을 생성하면 된다.BeanDefinition 살펴보기
BeanDefinition 정보
📍 정리
🔖 번외 (단축키)
All reactions