使用 Spring 框架自动装配产生奇怪的结果

Autowiring Producing Strange Results with Spring Framework

我在 class 中创建了一个用于自动装配的 Map 对象映射。地图的创建加载正常。但是,当我在 class 中自动装配地图时,键更改为对象名称的小写值。我在创建 bean 后立即打印密钥,这些密钥正是我所期望的。但是,键值一旦被自动装配就变成了其他东西。例如,要加载的对象是 org.bcn.sys.BasicDataobject,键变为 basicDataObject。很奇怪。有人能告诉我这是怎么回事吗?这些属性来自属性文件。例如,

dat1=org.bcn.sys.BasicDataobject 变成 basicData,key 不是 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!!!!
   }

Spring 使用组件名称作为键,我不知道为什么要这样做!因此,例如,当 class 被 @Component 注释而没有 value 属性时,它使用 dataObject 作为键。当我使用 @Component(value="dat1") 将 value 属性应用于 @Component 注释时,Spring 开始使用 dat1 作为键!!!我很惊讶它正在替换我的键,因为组件是地图的值部分。我希望这可以帮助处于类似情况的人

 //Uses dataObject as key
  @Component
  public class DataObject implement BasicTypeable{

  }

 //Uses dat1 as key
 @Component(value="dat1")
 public class DataObject implement BasicTypeable{

 }