使用Spring框架自动生成奇怪的结果

时间:2018-01-05 23:28:26

标签: spring autowired spring-bean

我创建了一个Map对象的地图,用于在类中进行自动装配。地图的创建加载很好。但是,当我在类中自动绘制地图时,键会更改为对象名称的小写值。我在创建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!!!!
   }

1 个答案:

答案 0 :(得分:0)

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

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

  }

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

 }