🤗 인프런 [스프링 핵심원리-기본편]을 듣고 기록하는 글입니다
BeanFactory

- 스프링 컨테이너의 최상위 인터페이스
- bean을 관리하고 조회하는 역할 (getBean()같은거)
- 지금 우리가 사용한 기능은 대부분 BeanFactory가 제공하는 기능
ApplicationContext
- BeanFactory 기능을 모두 상속받아서 제공
- bean 관리 조회 이외의 다른 수많은 부가기능을 applicationContext가 제공

-
MessageSource - 메세지 소스를 활용한 국제화 기능
- 한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로 출력하는것
-
EnviornmentCapable - 환경변수
- 로컬개발 / 테스트서버(개발환경) / 운영환경 이런식으로 실제로는 구성
- 각 환경별로 어떤 db랑 연결해야하는지 등, 환경변수 관련 기능 처리
-
ApplicationEventPublisher - 애플리케이션 이벤트
-
ResourceLoader - 편리한 리소스 조회
- 파일, 클래스path, 외부 등에서 리소스를 편리하게 조회하는 기능
그외 설정 형식
설정 종류들

- 이런식으로 java코드 외에도 xml, grovvy등이 존재함
- 자바코드 - AppConfig.class
- AnnotationConfig
- ApplicationContext
- XML - appConfig.xml
- GenericXml
- ApplicationContext
- xml은 과거에 많이 사용했던거여서 구글에서 정보 검색할때나 그럴때도 xml이 많이 나오긴함. 나도 그걸 느껴서 어떻게 읽는지를 알아두면 적용하는데 더 편할거같음
- XXX - appConfig.xxx
xml 파일 만드는법

bean 메타 정보 - BeanDefinition
- 스프링이 이렇게 다양한 설정형식을 지원하는 방법 = BeanDefinition이라는 추상화 덕분
- 역할과 구현을 개념적으로 나눈것
- BeanDefinition을 빈 설정 메타정보라고 하는데, @Bean이나 < bean > 작성때마다 메타 정보가 생성되고, 이 메타정보를 기반으로 스프링 빈을 생성함
java 코드로 생성시 메타정보 생성 과정
- AnnotatedBeanDefinitionReader를 사용해서 AppConfig를 읽고, BeanDefinition 생성
xml로 생성 시 메타정보 생성 과정
- GenerixXmlApplicationContext는 XmlBeanDefinitionReader를 사용해서 appConfig.xml을 읽고 BeanDefinition을 생성하는것
메타정보 확인 코드
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
@Test
@DisplayName("빈 설정 메타정보 확인")
void findApplicationBean() {
String[] beanDefinitionNames = ac.getBeanDefinitionNames();
for (String beanDefinitionName : beanDefinitionNames) {
BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);
if (beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION) {
System.out.println("beanDefinition = " + beanDefinition +
"beanDefinition = " + beanDefinition);
}
}
}
-
이런식으로 다양한 정보를 가지고있음. 얘가 싱글톤인지, lazyinit인지 등등
-
BeanDefinition을 직접 생성해서 스프링 컨테이너에 등록가능.
-
하지만 그런짓을 할리는 거의 없고, 그냥 다양한 형태의 설정정보를 BeanDefinition으로 추상화해서 사용하는구나만 알고있으면됨.
-
가끔 스프링 코드같은거 보면 BeanDefinition이 보일때 있음. 그럴때 도움되라고 조금 배워둔거임
빈 등록방법
- 직접 springcontainer에 등록하는방법
- factory method를 쓰는 방법
- 우리가 annotation을 사용해서 막 만들던 방식이 이쪽에 해당됨.
- appConfig라는 factory method를 통해서 만들었다~
