这是 map
@Autowired
private Map<String, ISendableConverter> converters;
和ISendableConverter
public interface ISendableConverter {
ISendableMsg convert(BaseMessage baseMessage);
String getType();
}
有一些类实现了ISendableConverter
我想通过使用 spring @Autowried
注释将它们注入(inject)到变量 converters
中。
类的实例为value,方法getType()
的结果为key。
喜欢这个
@Component
public class SendableVoiceMsgConverter implements ISendableConverter {
@Override
public ISendableMsg convert(BaseMessage baseMessage) {
// TODO Auto-generated method stub
return null;
}
@Override
public String getType() {
return "VOICE";
}
}
这可能吗?以及如何?
最佳答案
您可以使用 Spring Java 配置使用您选择的键创建一个自动初始化的映射:
在带有 @Configuration
注释的类中:
@Autowired
private List<ISendableConverter> sendableConverters;
@Bean
public Map<String, ISendableConverter> sendableConvertersMap() {
Map<String, ISendableConverter> sendableConvertersMap = new HashMap<>();
for (ISendableConverter converter : sendableConverters) {
sendableConvertersMap.put(converter.getType(), converter);
}
return sendableConvertersMap;
}
比你注入(inject)这张 map :
@Resource()
private Map<String, ISendableConverter> sendableConverters;
如果您定义了更多相同类型的映射,您可以选择在 @Resource
注释中添加一些选择器字符串。
这样你所要做的就是通过你的spring bean实现ISendableConverter
,它会自动出现在上面定义的Map中。
您无需为每个实现手动创建 map 项。
关于java - 可以弹出@Autowired Map吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20918825/