-
[김영한 스프링] 10. 스프링 컨테이너Spring/스프링 핵심 원리 - 기본편 2023. 4. 14. 22:41
스프링 컨테이너 생성
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
- ApplicationContext를 스프링 컨테이너라 한다.
- ApplicationContext는 인터페이스이다.
- 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있다.
- 직전에 AppConfig 를 사용했던 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이다.
- 자바 설정 클래스를 기반으로 스프링 컨테이너(ApplicationContext)를 만들어보자.
- new AnnotationConfigApplicationContext(AppConfig.class);
- 이 클래스는 ApplicationContext 인터페이스의 구현체이다
빈 이름
- 빈 이름은 메서드 이름을 사용한다.
- 빈 이름을 직접 부여할 수 도 있다.
- @Bean(name="memberService2")
※ 주의 : 빈 이름은 항상 다른 이름을 부여해야 한다. 같은 이름을 부여하면, 다른 빈이 무시되거나, 기존 빈을 덮어버리거나 설정에 따라 오류가 발생한다.
컨테이너에 등록된 모든 빈 조회
test/java/hello.core/beanfind/ApplicationContextInfoTest 생성
JUnit 5 부터는 클래스와 메서드에 public, static 생략 가능
iter로 for문 자동 생성
ac.getBeanDefinitionNames() : 스프링에 등록된 모든 빈 이름을 조회한다.
ac.getBean() : 빈 이름으로 빈 객체(인스턴스)를 조회한다.
package hello.core.beanfind;
import hello.core.AppConfig;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
class ApplicationContextInfoTest {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
@Test
@DisplayName("모든 빈 출력하기")
void findAllBean() {
String[] beanDefinitionNames = ac.getBeanDefinitionNames();
for (String beanDefinitionName : beanDefinitionNames) {
Object bean = ac.getBean(beanDefinitionName);
System.out.println("name = " + beanDefinitionName + " object = " + bean);
}
}
@Test
@DisplayName("애플리케이션 빈 출력하기")
void findApplicationBean() {
String[] beanDefinitionNames = ac.getBeanDefinitionNames();
for (String beanDefinitionName : beanDefinitionNames) {
BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);
// Role ROLE_APPLICATION : 직접 등록한 애플리케이션 빈
// Role ROLE_INFRASTRUCTURE : 스프링이 내부에서 사용하는 빈
if (beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION) {
Object bean = ac.getBean(beanDefinitionName);
System.out.println("name = " + beanDefinitionName + " object = " + bean);
}
}
}
}스프링 핵심 원리 - 기본편 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런
www.inflearn.com
'Spring > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
[김영한 스프링] 12. BeanFactory와 ApplicationContext, 다양한 설정 형식 지원, 스프링 빈 설정 메타 정보 (0) 2023.04.16 [김영한 스프링] 11. 스프링 빈 조회 (0) 2023.04.16 [김영한 스프링] 09. 스프링으로 전환하기 (0) 2023.04.13 [김영한 스프링] 08. 좋은 객체 지향 설계의 5가지 원칙 적용, IoC, DI, 그리고 컨테이너 (0) 2023.04.12 [김영한 스프링] 07. AppConfig 리팩터링, 새로운 구조와 할인 정책 적용 (0) 2023.04.12