Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 스프링 컨테이너와 스프링 빈
- 코틀린인액션
- kotlin in action 정리
- 7장 고급매핑
- Kotlin
- 백준 20055 컨베이어 벨트 위의 로봇
- Python
- 고급매핑
- Kotlin In Action
- Kotlin in action 6장
- Kotlin in action 5장
- 객체 지향 설계와 스프링
- 코틸린인액션
- 20055
- 13460 구슬탈출 2
- 자바 ORM 표준 JPA 프로그래밍 7장
- 스프링 핵심 원리 이해
- 컨베이어 벨트 위의 로봇 Python
- Kotlin in action 3장
- 스프링 핵심 원리 - 기본편
- 백준 13460 Python
- spring
- Kotlin in action 10장
- 스프링 핵심 원리
- 싱글톤 컨테이너
- 기능개발 python
- 코틀린
- 백준
- KotlinInAction
- 20055 컨베이어 벨트 위의 로봇
Archives
- Today
- Total
기록하는 습관
스프링 핵심 원리 - 기본편 (3) - 스프링 컨테이너와 스프링 빈 본문
[ Spring Container(스프링 컨테이너) ]
- ApplicationContext 를 스프링 컨테이너라 한다.
- 스프링 컨테이너는 @Configuration이 붙은 AppConfig를 설정(구성) 정보로 사용한다.
- 여기서 @Bean이라 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다. 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라 한다.
- 스프링 빈은 @Bean 이 붙은 메서드의 명을 스프링 빈의 이름으로 사용한다. ( memberService , orderService )
- 스프링 빈은 applicationContext.getBean() 메서드 를 사용해서 찾을 수 있다.
스프링 컨테이너 생성
- ApplicationContext를 스프링 컨테이너라 하고 인터페이스이다.
- 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있다.
스프링 컨테이너 생성 과정
이해하기 쉽게 4단계로 나눴지만 실제로는 생성자를 호출하면서 의존관계 주입도 한번에 처리된다.
1. 스프링 컨테이너 생성
- new AnnotationConfigApplicationContext(AppConfig.class)
2. 스프링 빈 등록
- 스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보를 사용해서 스프링 빈을 등록한다.
빈 이름
- 빈 이름은 메서드 이름을 사용한다.
- 빈 이름을 직접 부여할 수 도 있다.
- 예) @Bean(name="memberService2")
- 주의: 빈 이름은 항상 다른 이름을 부여해야 한다. 같은 이름을 부여하면, 다른 빈이 무시되거나, 기존 빈을 덮어버리거나 설정에 따라 오류가 발생한다.
3. 스프링 빈 의존관계 설정 - 준비
4. 스프링 빈 의존관계 설정 - 완료
- 스프링 컨테이너는 설정 정보를 참고해서 의존관계를 주입(DI)한다.
[ 스프링 빈 조회 ]
1. 컨테이너에 등록된 모든 빈 조회
ApplicationContextInfoTest.java
- 모든 빈 출력하기
- 실행하면 스프링에 등록된 모든 빈 정보를 출력할 수 있다.
- ac.getBeanDefinitionNames() : 스프링에 등록된 모든 빈 이름을 조회한다.
- ac.getBean() : 빈 이름으로 빈 객체(인스턴스)를 조회한다. 애플리케이션 빈 출력하기
- 내가 사용하는 빈 출력하기
- getRole() 로 구분
- ROLE_APPLICATION : 일반적으로 사용자가 정의한 빈
- ROLE_INFRASTRUCTURE : 스프링이 내부에서 사용하는 빈
2. 스프링 빈 조회 - 기본
ApplicationContextBasicFindTest.java
- 스프링 빈을 찾는 가장 기본적인 방법 (name으로 조회)
- ac.getBean(빈이름, 타입)
- ac.getBean(타입)
3. 스프링 빈 조회 - 동일한 타입이 둘 이상
ApplicationContextSameBeanFindTest.java
- ac.getBeansOfType() 을 사용하면 해당 타입의 모든 빈을 조회할 수 있다. (Type으로 조회)
4. 스프링 빈 조회 - 상속 관계
ApplicationContextExtendsFindTest.java
- 부모 타입으로 조회하면, 자식 타입도 함께 조회한다.
- 그래서 모든 자바 객체의 최고 부모인 Object 타입으로 조회하면, 모든 스프링 빈을 조회한다.
[ BeanFactory와 ApplicationContext ]
BeanFactory
- 스프링 컨테이너의 최상위 인터페이스
- 스프링 빈을 관리하고 조회하는 역할을 담당
- getBean() 을 제공한다.
ApplicationContext
- BeanFactory 기능을 모두 상속받아서 제공
- ApplicationContext는 빈을 관리하고 조회하는 기능은 물론, 수 많은 부가기능이 존재 (많은 인터페이스 상속 받음)
- 메시지소스를 활용한 국제화 기능
- 예를 들어서 한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로 출력
- 환경변수
- 다른 환경들마다 환경변수를 설정하고, 서로 다른 DB나 외부 cloud 연결을 다르게 함
- 로컬, 개발, 운영등을 구분해서 처리
- 애플리케이션 이벤트
- 이벤트를 발행하고 구독하는 모델을 편리하게 지원
- 편리한 리소스 조회
- 파일, 클래스패스, 외부 등에서 리소스를 편리하게 조회
[ 다양한 설정 형식 지원 (Java, XML) ]
- AppConfig.java는 Java 코드를 사용한 설정
- new AnnotationConfigApplicationContext(AppConfig.class) 사용
- XML 설정도 있지만 최근 실무에서는 잘 사용하지 않는다.
- 하지만 아직 많은 레거시 프로젝트가 XML로 되어 있고, XML을 사용하면 컴파일 없이 빈 설정 정보를 변경할 수 있는 장점도 있기에 한 번쯤 배워두자.
- GenericXmlApplictionContext("appConfig.xml") 과 같이 xml 파일을 넘겨주면 됨
[ 스프링 빈 설정 메타 정보 - BeanDefinition ]
- 스프링 컨테이너가 최종적으로 참조하는 설정 파일의 메타정보
- 역할과 구현을 개념적으로 나눔
- 스프링 컨테이너는 자바 코드인지, XML인지 몰라도 된다. 오직 BeanDefinition만 알면 된다.
[ 정리 ]
빈 등록하는 방법
- 직접 스프링 빈을 등록한다. -> XML 사용
- Factory Method를 사용해서 등록한다 -> Java AppConfig 사용
'개발 > Spring' 카테고리의 다른 글
스프링 핵심 원리 - 기본편 (5) - 컴포넌트 스캔 (0) | 2021.06.27 |
---|---|
스프링 핵심 원리 - 기본편 (4) - 싱글톤 컨테이너 (0) | 2021.06.27 |
스프링 핵심 원리 - 기본편 (2) 스프링 핵심 원리 이해 (0) | 2021.06.26 |
스프링 핵심 원리 - 기본편 (1) 객체 지향 설계와 스프링 (0) | 2021.06.26 |
[Spring] MVC 프로젝트 설정 (0) | 2020.04.04 |
Comments