녕의 학습 기록

[Spring 기본] 스프링 컨테이너와 빈 (1) 본문

Dev/Spring

[Spring 기본] 스프링 컨테이너와 빈 (1)

kjyyjk 2022. 11. 5. 02:48

 학습 내용 

 

스프링 컨테이너의 생성과정과 빈 조회


* 스프링 컨테이너 생성

 

ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

ApplicationContext : 스프링 컨테이너이자 인터페이스

 

즉, new 이하의 클래스는 ApplicationContext 인터페이스의 구현체.

 

과정

1. 스프링 컨테이너 생성

 

구성 정보를 지정하여 컨테이너 생성한다

(코드에서는 AppConfig.class를 파라미터로 넘겨줌으로써 지정함)

 

key값으로 이름, value로 객체

 

2. 스프링 빈 등록

 

@Configuration과 파라미터로 넘김으로써 구성 정보로 지정한 클래스의 @Bean 전부 호출

 

호출 후 반환되는 객체를 스프링 빈 저장소에 등록한다

 

Bean 이름 = 메서드 이름을 사용하며, 항상 다른 이름을 부여해야한다

 

@Bean(name="  ")을 통해 이름 부여하기도 가능하지만 권장하지 않음

 

3. 스프링 빈 의존관계 설정

 

설정 정보(AppConfig)를 참고하여 의존관계 주입

 

스프링 빈 의존관계

 

스프링은 빈 생성 / 의존관계 주입 단계로 나누어지지만 자바 코드로 스프링 빈 등록하면 한번에 처리된다

 

 

 

* 컨테이너 내 모든 빈 조회

 

applicationContext = ac

 

ac.getBeanDefinitionNames() : 스프링에 등록된 모든 빈의 이름 조회

 

-> 배열에 저장 후 for 문을 이용해 빈들을 차례 차례 꺼내 출력했다.

 

ac.getBean() : 빈 이름으로 빈 객체 조회

Test 실행 결과

위 사진을 확인하면 내가 등록한 빈 이외에의 것도 확인 가능하다

 

스프링 내부에서 사용하는 빈.

 

만약 내가 등록한 빈만 확인하고 싶다면 빈.getRole()을 이용하여 아래와 비교 출력

 

- ROLE_APPLICATION : 내가 정의한 빈

- ROLE_INFRASTRUCTURE : 내부에서 사용하는 빈

 

 

 

* 스프링 빈 기본 조회

 

.getBean()을 이용한다

 

- 빈 이름과 타입을 인자로 조회

 

 

- 빈 이름 없이 타입만을 인자로 조회

 

 

- 빈의 구체 타입으로 조회 (구현에 의존하기 때문에 권장하지 않는다)

 

구체 타입. MemberServiceImple 클래스를 타입으로 조회
실패 테스트도 작성. assertThrows 내에 람다 로직을 실행했을 때 해당 예외가 터지면 성공


 다음 학습 내용 

 

' 타입으로 조회 시에 만약 동일 타입의 스프링 빈이 둘 이상 존재한다면 ? ' 에 대해 학습

 

스프링 빈 조회(상속)

 

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com