Replies: 2 comments
|
오.. BeanFactory랑 ApplicationContext 비교 참고할게요! |
0 replies
|
표가 깔끔하네요 저도 참고하겠씁니다! |
0 replies
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.
스프링 컨테이너와 스프링 빈
1️⃣스프링 컨테이너 생성
스프링 컨테이너가 생성되는 과정
ApplicationContext를 스프링 컨테이너라 한다.ApplicationContext를 인터페이스이다.new AnnotationConfigApplicationContext(AppConfig.class);ApplicationContext인터페이스의 구현체이다.1. 스프링 컨테이너 생성
new AnnotationConfigApplicationContext(AppConfig.class)2. 스프링 빈 등록
✅빈 이름
3. 스프링 빈 의존관계 설정
4. 스프링 빈 의존관계 설정 - 완료
2️⃣컨테이너에 등록된 모든 빈 조회
ac.getBeanDefinitionNames(): 스프링에 등록된 모든 빈 이름을 조회한다.ac.getBean(): 빈 이름으로 빈 객체(인스턴스)를 조회한다.ROLE_APPLICATION: 일반적으로 사용자가 정의한 빈ROLE_INFRASTRUCTURE: 스프링이 내부에서 사용하는 빈3️⃣스프링 빈 조회 - 기본
스프링 컨테이너에서 스프링 빈을 찾는 가장 기본적인 조회 방법
ac.getBean(빈이름, 타입)ac.etBean(타입)NoSuchBeanDefinitionException: No bean named 'xxxxx' available예제 코드
4️⃣스프링 빈 조회 - 동일한 타입이 둘 이상
ac.getBeanOfType()을 사용하면 해당 타입의 모든 빈을 조회할 수 있다.5️⃣스프링 빈 조회 - 상속 관계
Object타입으로 조회하면, 모든 스프링 빈을 조회한다.6️⃣BeanFactory와 AppliactionContext
✅BeanFactory
✅ApplicationContext
ApplicationContext가 제공하는 부가기능
메시지소스를 활용한 국제화 기능
환경변수
애플리케이션 이벤트
편리한 리소스 조회
BeanFactory 와 ApplicationContext차이
7️⃣다양한 설정 형식 지원 - 자바 코드, XML
✅애노테이션 기반 자바 코드 설정 사용
new ApplicationConfigApplicationContext(AppConfig.class)ApplicationConfigApplicationContext클래스를 사용하면서 자바 코드로된 설정 정보를 넘기면 된다.✅ XML 설정 사용
GenericXmlApplicationContext를 사용하면서 xml 설정 파일을 넘기면 된다.➡️XmlAppConfig 사용 자바 코드
appConfig.xml스프링 설정 정보와 자바 코드로 된AppConfig.java설정 정보를 비교해보면 거의 비슷하다.8️⃣스프링 빈 설정 메타 정보 - BeanDefinition
스프링은 어떻게 이런 다양한 설정 형식을 지원하는 것일까? → 그 중심에는
BeanDefinition만 알면 된다.역할과 구현을 개념적으로 나눈것..
BeanDefinition을 만들면 된다.BaanDefinition을 만들면 된다.BeanDefinition만 알면 된다.BeanDefinition을 빈 설정 메타정보라 한다.스프링 컨테이너는 이 메타정보를 기반으로 스프링 빈을 생성한다.
AnnotationConfigApplicationContext는AnnotatedbeanDefinitionReader를 사용해서AppConfig.class를 읽고BeanDefinition을 생성한다.GenericXmlApplicationContext는XmlBeanDefinitionReader를 사용해서appConfig.xml설정 정보를 읽고BeanDefinition을 생성한다.XxxBeanDefinitionReader를 만들어서BeanDefinition을 생성하면 된다.BeanDefinition 살펴보기
BeanClassName: 생성할 빈의 클래스명(자바 설정 처럼 팩토리 역할의 빈을 사용하면 없음)factoryBeanName: 팩토리 역할의 빈을 사용할 경우 이름, 예) appConfigfactoryMethodName: 빈을 생성할 팩토리 메서드 지정, 예)memberServiceScope: 싱글톤(기본값)lazyInit: 스프링 컨테이너를 생성할 때 빈을 생성하는 것이 아니라, 실제 빈을 사용할 때 최대한 생성을 지연처리 하는지 여부InitMethodName: 빈을 생성하고, 의존관계를 적용한 뒤에 호출되는 초기화 메서드 명DestoryMethodName: 빈의 생명주기가 끝나서 제거하기 직전에 호출되는 메서드 명Constructor arguments,Properties: 의존관계 주입에서 사용한다. (자바 설정 처럼 팩토리 역할의 빈을 사용하면 없음)✅정리
BeanDefinition을 직접 생성해서 스프링 컨테이너에 등록할 수 있다. → But! 실무에서는BeanDefinition을 직접 정의하거나 사용할 일은 거의 없음BeanDefinition에 대해서는 너무 깊이 이해하기 보다는 스프링이 다양한 형태의 설정 정보를BeanDefinition으로 추상화해서 사용하는 것 정도만 이해하면 된다.All reactions