필요한 타입의 Bean을 모두 가져오기
해당 내용은 '스프링 입문을 위한 자바 객체 지향의 원리와 이해'와 인프런 김영한님의 '스프링 핵심 원리 - 기본편' 강의를 참고하였습니다.
의도적으로 특정 타입의 스프링 전부 필요할 때가 있다.
요청 또는 로직에 따라서 필요한 빈을 바꿔줘야 할 때가 있기 때문이다.
자 다음과 같은 테스트 코드를 짜보자.
베이스는 우리가 기존에 해왔던 Car 에서 진행한다.
static class Fuel{
Map<String, FuelTank> fuelTankMap;
@Autowired
public Fuel(Map<String, FuelTank> fuelTankMap){
this.fuelTankMap = fuelTankMap;
System.out.println("fuelTankMap = " + fuelTankMap);
}
public String returnEnergy(String fuelCode){
FuelTank tank = fuelTankMap.get(fuelCode);
return tank.getEnergy().getEnergy();
}
}
위와 같은 간단한 테스트용 클래스를 작성한다.
해당 클래스는 @Autowired
로 FuelTank
에 해당하는 클래스들을 가져온다.
그리고 테스트 코드는 다음과 같이 작성한다.
@Test
void findAllBeanTest(){
ApplicationContext ac = new AnnotationConfigApplicationContext(AutoApplicationConfig.class, Fuel.class);
Fuel fuel = ac.getBean(Fuel.class); // Fuel 클래스 타입에 해당하는 Bean을 가져와라.
String energy1 = fuel.returnEnergy("gasolineOil");
assertThat(energy1).isEqualTo("gasolineOil");
}
그럼 우리가 저번에 만들었던@ComponentScan
을 통해서 Bean들이 등록이 되고, @Autowired
를 통해서 의존성이 주입이 되는 것을 테스트 실행 로그를 통해 확인할 수 있다.
22:58:32.026 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'autoApplicationConfig'
22:58:32.029 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'allBeanTest.Fuel'
22:58:32.045 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'electricBattery'
22:58:32.046 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'gasolineOil'
22:58:32.047 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Autowiring by type from bean name 'allBeanTest.Fuel' via constructor to bean named 'electricBattery'
22:58:32.047 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Autowiring by type from bean name 'allBeanTest.Fuel' via constructor to bean named 'gasolineOil'
그 다음에 우리는 위에서 생성자에 표시한
System.out.println("fuelTankMap = " + fuelTankMap);
를 통해서 우리는 다음과 같이 Map에 Bean들이 들어온 것을 확인할 수 있다.
fuelTankMap = {electricBattery=hello.core.carTest.tank.ElectricBattery@c36f078f, gasolineOil=hello.core.carTest.tank.GasolineOil@7da48083}
그러므로 이제 위에 적어놓은 Fuel
클래스의 returnEnergy
메서드를 통해서 필요한 Bean을 넣으면 우리가 원하는 Bean을 가져올 수 있다.
energy1 = Gasoline
Author And Source
이 문제에 관하여(필요한 타입의 Bean을 모두 가져오기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@namkun/필요한-타입의-Bean을-모두-가져오기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)