Автопроводка дает странные результаты с помощью Spring Framework
Я создаю карту объектов Map для автопроводки в классе. Создание карты загружается нормально. Однако, когда я автоматически связываю карту в классе, ключи меняются на строчные значения имен объектов. Я печатаю ключи сразу после создания компонента, и ключи - это то, что я ожидаю. Однако значения ключей становятся чем-то другим после их автоматического подключения. Например, загружаемыми объектами являются org.bcn.sys.BasicDataobject, а ключ становится basicDataObject. Очень странно. Может кто-нибудь сказать мне, что происходит? Свойства взяты из файла свойств. Например,
dat1 = org.bcn.sys.BasicDataobject становится basicData, ключ не dat1, а что-то вроде basicDataobject!!! Например
@Bean
public Map<String,DataObject> dataObjects(){
Map<String,DataObject> m=new HashMap<String,DataObject>();
for(Map.EntrySet<String,String> e: e.entrySet()){
m.put(e.getKey(), loadDataObject(e.getValue());
}
//Prints keys correctly
LOG.info("m contains "+m)
}
@Component
@Import(AppConf.class)
class DataObjectProcessor{
@Autowired
private Map<String,DataObject> dataObjects;
// Keys are lower case names of the DataObjects!!!!
}
1 ответ
Spring использует имена компонентов в качестве ключей, я понятия не имею, почему он это делает! Так, например, он использует dataObject в качестве ключа, когда класс аннотируется @Component без атрибута value. Когда я применил атрибут value к аннотации @Component, используя @Component(value="dat1"), Spring начал использовать dat1 в качестве ключа!!! Я удивлен, что он заменяет мои ключи, так как Компонент является частью карты. Я надеюсь, что это помогает кому-то в подобной ситуации
//Uses dataObject as key
@Component
public class DataObject implement BasicTypeable{
}
//Uses dat1 as key
@Component(value="dat1")
public class DataObject implement BasicTypeable{
}