내가 뭘 잘못 했어? 문제를 어떻게 해결합니까?
여기 :
Map<String,String> someMap = (Map<String,String>)getApplicationContext().getBean("someMap");
다음과 같이 반환하기 때문에 일반적으로 사용하지 않으려는 레거시 메서드를 사용합니다 Object.
Object getBean(String name) throws BeansException;
빈 팩토리에서 빈을 가져오고 (싱글 톤용) / 만들기 (프로토 타입 용)를 선호하는 방법은 다음과 같습니다.
<T> T getBean(String name, Class<T> requiredType) throws BeansException;
다음과 같이 사용하십시오.
Map<String,String> someMap = app.getBean(Map.class,"someMap");
모든 Map객체가 반드시 Map<String, String>객체 가 아니기 때문에 컴파일되지만 여전히 확인되지 않은 변환 경고가 표시 됩니다.
그러나 <T> T getBean(String name, Class<T> requiredType) throws BeansException;제네릭 컬렉션과 같은 빈 제네릭 클래스에서는 하나 이상의 클래스를 매개 변수로 지정해야하기 때문에 충분하지 않습니다 (컬렉션 유형 및 제네릭 유형).
이런 종류의 시나리오에서 일반적으로 더 나은 방법은 직접 BeanFactory메소드 를 사용하지 않고 프레임 워크가 Bean을 주입하도록하는 것입니다.
빈 선언 :
@Configuration
public class MyConfiguration{
@Bean
public Map<String, String> someMap() {
Map<String, String> someMap = new HashMap();
someMap.put("some_key", "some value");
someMap.put("some_key_2", "some value");
return someMap;
}
}
콩 주입 :
@Autowired
@Qualifier("someMap")
Map<String, String> someMap;