Автопроводка дает странные результаты с помощью 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{

 }
Другие вопросы по тегам