我创建了一个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!!!!
}
答案 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{
}