使用 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{
}
我在 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{
}