我有配置类,在其中我像这样将Map创建为Bean。
@Bean
public Map<String, Filter> filters() {
Map<String, Filter> map = new HashMap<>();
map.put("RECOMMENDATION", new RecommendationFilter());
map.put("UPCOMING", new UpcomingFilter());
return map;
}
然后将此地图自动关联到另一个服务:
@Autowired
private Map<String, Filter> filterMap;
在调试模式下,我可以看到映射具有另一个键,即类名:
但不是“ RECOMMENDATION”和“ UPCOMING”(如何在配置中进行设置)。 和谷歌搜索没有帮助。
答案 0 :(得分:2)
之所以会发生,是因为您可能会遇到类似的情况
@Component
class RecommendationFilter implements Filter{
}
@Component
class UpcomingFilter implements Filter{
}
所以当您这样做
@Autowired
private Map<String, Filter> filterMap;
spring将自动注入Filter的实例,并以bean名称作为键,上述类的默认bean名称为RecommendationFilter和即将到来的Filter。
两种解决方案。
@Component("RECOMMENDATION")
class RecommendationFilter implements Filter{
}
@Component("UPCOMING")
class UpcomingFilter implements Filter{
}
@Component
(请注意。这会使它们成为非春季豆类,不确定那是否是您想要的)选项1将是正确的方法。只需按上述指示为豆子命名即可。
通过显式创建地图,您并没有利用spring的依赖注入魔术。 :)(为什么要做一个框架正在为您做的事情,从而否定了整个控制反转(IOC)原理)