[기본] 스프링 빈 조회
이전 포스팅
스프링 빈 등록 방법은 두가지가 있다.
- 수동등록 - Config 클래스에서 @Bean 으로 등록
- 자동등록 - Config 클래스에 @ComponentScan. 각 클래스에 @Component. 의존성주입은 @Autowired로 해결.
등록된 빈은 스프링 컨테이너에 저장된다. @Autowired는 필요한 빈을 조회하여 해당 클래스의 필드에 주입하여준다.
테스트 코드 등에서 빈을 찾아 사용해야할 경우 컨테이너에서 어떻게 빈을 조회할까?
스프링 빈 조회 - 기본
@Bean
MemberService memberSerivce() {
return new MemberServiceImpl();
}
1. 타입으로 조회
Member memberService = ac.getBean(MemberService.class);
인터페이스 타입으로 조회가 가능하다.
2. 구체 타입으로 조회
Member memberService = ac.getBean(MemberServiceImpl.class);
구현 클래스의 타입으로도 조회가 가능하나 DIP 원칙을 위배시키므로 잘 사용하지 않는다.
3. 빈 이름으로 조회
Member memberService = ac.getBean("memberService", MemberService.class);
빈 이름으로 조회시 빈 이름과 구현클래스를 함께 파라미터로 넘긴다.
스프링 빈 조회 - 동일 타입 둘 이상
@Bean
MemberService memberSerivce1() {
return new MemberServiceImpl();
}
@Bean
MemberService memberSerivce2() {
return new MemberServiceImpl();
}
1. 타입으로 조회
Member memberService = ac.getBean(MemberService.class);
MemberService 타입 빈이 memberService1, memberService2 두개가 있으므로 중복 오류가 발생한다.
2. 빈 이름으로 조회
Member memberService = ac.getBean("MemberService1" MemberService.class);
빈 이름은 중복되지 않게 저장하는 것이 중요하다. 동일 타입 둘 이상이어도 이름이 달라 조회가 가능하다.
3. 특정 타입 모두 조회
Map<String, MemberService> beans = ac.getBeansOfType(MemberService.class);
getBeansOfType 메서드를 통해 해당 타입의 모든 빈을 Map에 저장할 수 있다.
4. 부모 타입으로 조회
Map<String, Object> allbean = ac.getBeansOfType(Object.class);
부모 타입으로 조회시 모든 자식 타입도 함께 조회된다. 모든 자바 객체의 최고 부모인 Object 타입으로 조회시 모든 스프링 빈이 조회된다.
getBean(이름, 타입) 으로 빈을 조회할 수 있다. 부모 타입 조회시 모든 자식 타입도 함께 조회됨에 유의한다. 특정 타입을 모두 조회할 경우 getBeansOfType 메서드로 조회하여 Map<String, 타입> 에 저장할 수 있다.
본 글은 김영한님의 "스프링 핵심 원리 - 기본편" 강의내용 및 이해한 내용을 정리한 것입니다.
Author And Source
이 문제에 관하여([기본] 스프링 빈 조회), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kiwonkim/기본-스프링-빈-조회저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)