녕의 학습 기록

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

Dev/Spring

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

kjyyjk 2022. 11. 6. 21:10

 학습 내용 

 

동일 타입과 상속 관계에 따른 스프링 빈 조회

 

BeanFactory , Application Context


* 동일 타입 빈 조회

 

둘 이상의 동일 타입 스프링 빈이 있을 때 타입으로 조회 시 오류 발생

 

해결하기 위해 빈 이름을 지정한다 (너무도 당연한 얘기일지도..)

 

빈 이름은 따로 지정하지 않는 한 @Bean 메서드의 이름이다.

 

* 상속 관계의 스프링 빈 조회

 

부모 타입을 조회 --> 자식 타입도 조회

 

DiscountPolicy 부모 타입을 가지는 자식 2

 

부모 타입인 DiscountPolicy로 조회

static import를 사용하여 앞에 Assertions 생략

 

assertThrowos( 예외, 로직);

== 로직을 실행했을 때 해당 하는 예외가 터질 경우 통과이다

 

실행 결과: 통과

위 사진에서 통과 했다는 것은 DiscountPolicy를 타입으로 조회하였을 때 둘 이상의 스프링 빈이 조회됐다는 것을 의미한다

 

NoUniqueBeanDefinitionException : 스프링 빈이 하나가 아닌 두개 이상 있을 경우 발생하는 예외

 

만약 모든 자바 객체의 부모 타입인 Object를 타입으로 조회한다면..?

 

모든 스프링 빈이 조회될 것이다.

 

Object를 타입으로 모든 스프링 빈을 조회
실행 결과

앞 @Configuration 설정 정보에서 등록한 빈 뿐만 아니라 스프링 내부에서 사용하는 빈까지 다 조회.

 

* BeanFactory와 Application Context

 

BeanFactory

- 스프링 컨테이너의 최상위 인터페이스

- 스프링 빈 관리, 조회 ( getBean 제공 )

 

Application Context

- BeanFactory를 상속받는다

-빈 관리(BeanFactory 상속) 뿐만 아니라 수많은 부가기능

 

최상위 인터페이스인 BeanFactory, 이를 상속받는 AC 인터페이스

우리가 말하는 스프링 컨테이너는 BeanFactory 또는 Application Context

 

ApplicationContext ac = new AnnotationConfigApplicationContext(설정정보);

//new 연산자 뒤로는 ApplicationContext 인터페이스를 구현하는 구현체이다

 

여태 그래왔듯이 그냥 Application Context 사용하면 된다


 다음 학습 내용 

 

애노테이션 기반의 자바 설정 클래스가 아닌, XML을 기반 스프링 컨테이너 생성

 

 

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

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

www.inflearn.com