【问题标题】:Autowiring Producing Strange Results with Spring Framework使用 Spring 框架自动装配产生奇怪的结果
【发布时间】:2018-06-15 19:17:50
【问题描述】:

我为类中的自动装配创建了一个 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!!!!
   }

【问题讨论】:

    标签: spring autowired spring-bean


    【解决方案1】:

    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{
    
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多