반응형
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 | 31 |
Tags
- 스프링
- 클린아키텍처
- 스프링부트
- 이펙티브자바
- 카카오
- 티스토리챌린지
- java
- Effective Java
- kubernetes
- JavaScript
- 이차전지관련주
- 스프링핵심원리
- 코딩테스트
- effectivejava
- Effective Java 3
- 카카오 면접
- 이펙티브 자바
- 알고리즘
- 알고리즘정렬
- 오블완
- 자바스크립트
- Spring
- 김영한
- 엘라스틱서치
- 예제로 배우는 스프링 입문
- 자바
- ElasticSearch
- Sort
- 스프링 핵심원리
- k8s
Archives
- Today
- Total
Kim-Baek 개발자 이야기
[스프링 핵심원리] 24. 스프링 빈 조회 - 기본 본문
김영한님의 [스프링 핵심 원리] 강의를 정리하고, 내가 생각한 내용까지 정리하는 포스팅
지난번에는 컨테이너에 등록된 모든 빈을 조회해보았다. 이번에는 하나의 빈을 조회하는 방법들에 대해서 기본적으로 사용되는 방식들에 대해서 알아볼 수 있도록 하겠다.
먼저 이전과 동일하게 스프링 컨테이너인 ApplicationContext의 구현체를 만들어서 빈을 가져오게 된다. 줄여서 ac 라고 사용할 수 있도록 하겠다. ac 에서 빈을 가져오는 메소드에 대해서 알아보겠다.
- ac.getBean ( 빈이름, 타입 )
- ac.getBean ( 타입 )
위의 두 가지 방식으로 빈을 가져올 수 있는데, 상황에 맞게 본인이 필요한 것을 쓰면 되겠다. 그런데 조회 대상의 스프링 빈이 없으면 어떻게 될까?
NoSuchBeanDefinitionException: No bean named 'xxxxx' available
이렇게 사용자가 찾으려는 빈의 이름으로 등록된 빈이 없다고 친절하게 알려준다. 예제 코드를 통해서 다시한번 살펴보도록 하자
package core.order.beanfind;
import core.order.AppConfig;
import core.order.member.MemberService;
import core.order.member.MemberServiceImpl;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import static org.assertj.core.api.Assertions.assertThat;
public class ApplicationContextBasicFindTest {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
@Test
@DisplayName("빈 이름으로 조회")
void findBeanByName() {
MemberService memberService = ac.getBean("memberService", MemberService.class);
assertThat(memberService).isInstanceOf(MemberServiceImpl.class);
}
@Test
@DisplayName("이름 없이 타입으로만 조회")
void findBeanByType() {
MemberService memberService = ac.getBean(MemberService.class);
assertThat(memberService).isInstanceOf(MemberServiceImpl.class);
}
@Test
@DisplayName("구체 타입으로 조회")
void findBeanByName2() {
MemberService memberService = ac.getBean("memberService", MemberServiceImpl.class);
assertThat(memberService).isInstanceOf(MemberServiceImpl.class);
}
@Test
@DisplayName("빈 이름으로 조회X")
void findBeanByNameX() {
//MemberService xxxxx = ac.getBean("xxxxx", MemberService.class);
Assertions.assertThrows(NoSuchBeanDefinitionException.class,
() -> ac.getBean("xxxxx", MemberService.class));
}
}
테스트 케이스를 살펴보자. 위에서 언급했던 메소드를 동일하게 사용하고 있는 것을 알 수 있다. 여기서 빈의 타입을 파라미터로 넣어줄 경우에 구체타입을 써도 되고, 인터페이스를 써도 된다는 것도 알 수 있다.
반응형
'개발 > Spring' 카테고리의 다른 글
Spring Cloud Config (0) | 2024.11.08 |
---|---|
Spring Quartz 란? (0) | 2024.11.07 |
[스프링 핵심원리] 23. 컨테이너에 등록된 모든 빈 조회 (0) | 2021.10.25 |
[스프링 핵심원리] 22. 스프링 컨테이너 생성 (0) | 2021.10.25 |
[스프링 핵심원리] 21. 스프링으로 전환하기 (0) | 2021.10.24 |
Comments