Was habe ich falsch gemacht? Wie löse ich das Problem?
Hier :
Map<String,String> someMap = (Map<String,String>)getApplicationContext().getBean("someMap");
Sie verwenden eine Legacy-Methode, die wir im Allgemeinen nicht verwenden möchten, da diese Folgendes zurückgibt Object
:
Object getBean(String name) throws BeansException;
Die Methode, um eine Bohne aus einer Bohnenfabrik zu erhalten (für Singleton) / zu erstellen (für einen Prototyp), ist:
<T> T getBean(String name, Class<T> requiredType) throws BeansException;
Verwenden Sie es wie:
Map<String,String> someMap = app.getBean(Map.class,"someMap");
wird kompiliert, aber immer noch mit einer ungeprüften Konvertierungswarnung, da nicht alle Map
Objekte unbedingt sindMap<String, String>
.
Aber <T> T getBean(String name, Class<T> requiredType) throws BeansException;
reicht jedoch in generischen Bean-Klassen wie generischen Sammlungen nicht aus, da hierfür mehr als eine Klasse als Parameter angegeben werden muss: der Sammlungstyp und seine generischen Typen.
In einem solchen Szenario und im Allgemeinen besteht ein besserer Ansatz darin, nicht direkt zu verwenden BeanFactory
Methoden , sondern das Framework die Bean injizieren zu lassen.
Die Bohnendeklaration:
@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;
}
}
Die Bohneninjektion:
@Autowired
@Qualifier("someMap")
Map<String, String> someMap;