Nik*_*las 2 java spring dictionary javabeans autowired
我有一个配置类,我可以像这样将 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;
}
Run Code Online (Sandbox Code Playgroud)
并在另一个服务中自动装配此地图:
@Autowired
private Map<String, Filter> filterMap;
Run Code Online (Sandbox Code Playgroud)
在调试模式下,我可以通过类名称看到映射有另一个键:
但不是“推荐”和“即将到来”,它是如何在配置中设置的。而且谷歌搜索没有帮助。
会发生这种情况是因为你可能有这样的事情
@Component
class RecommendationFilter implements Filter{
}
@Component
class UpcomingFilter implements Filter{
}
Run Code Online (Sandbox Code Playgroud)
所以当你这样做时
@Autowired
private Map<String, Filter> filterMap;
Run Code Online (Sandbox Code Playgroud)
spring会自动注入Filter的实例,以bean名称作为key,上述类的默认bean名称是recommendationFilter和imcomingFilter。
两种解决方案。
@Component("RECOMMENDATION")
class RecommendationFilter implements Filter{
}
@Component("UPCOMING")
class UpcomingFilter implements Filter{
}
Run Code Online (Sandbox Code Playgroud)@Component(请注意。这将使它们成为非 spring bean,不确定这是否是您想要的)选项 1 是正确的解决方法。只需按照上面的指示将 bean 命名为您想要的任何名称即可。
通过显式创建映射,您并没有利用 spring 的依赖注入魔法。:)(为什么你想做框架正在为你做的事情,这否定了整个控制反转(IOC)原则)
| 归档时间: |
|
| 查看次数: |
553 次 |
| 最近记录: |