본문 바로가기

개발/Spring

[Spring] Bean을 Collection으로 호출하기

최근 실무를 진행하면서 여전히 많이 부족함을 느낀 일이 있었다. 어떻게 보면 여전히 기본기가 부족하다고 할 수 있는 사건.

 

정책에 따라 생성된 Bean을 Map<String, Bean> 컬렉션을 통해 호출하는 코드를 보았는데, 바로 이해하지 못했다.

 

프로젝트 전역적으로 보아도 해당 Map에 Bean을 put 해주는 코드는 존재하지 않았던 것.

 

대략적인 코드는 아래와 같은 구조였다.

@Service
@RequiredArgsConstructor
public class MyService {
	private final Map<String, MyBean> myBeanMap;
    
    private MyBean getMyBean(String beanName) {
    	return myBeanMap.get(beanName);
    }
}

MyBean 객체는 상속을 통해 다형성을 활용한 구현이 가능한 구조였는데, 이 때 스프링 컨테이너에 Bean은 이름:객체 구조로 저장된다.

 

여기에서 Collection인 Map을 활용하여 저장된 Bean을 key로 하여 받으면, 해당 Bean을 가져올 수 있는 구조. 결국 직접 Map에 넣어주지 않아도 스프링 컨테이너에 지정된 빈을 가져올 수 있는 것이다. 따라서, 다형성 구조로 생성되어 있는 Bean을 효과적으로 가져올 수 있게 된다.

 

마찬가지로 List를 통해 해당 Bean을 호출하면, 컨테이너에 주입된 모든 타입의 객체를 가져올 수 있게 된다.

 

참고자료 : https://7357.tistory.com/117