Spring 自动装配后更改映射键
Spring change Map keys after autowiring
我有配置 class,我在其中创建 Map as 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;
在调试模式下,我可以看到地图有另一个键,由 class 名称:
- 推荐过滤器
- 即将到来的过滤器
但不是 "RECOMMENDATION" 和 "UPCOMING",它是如何在配置中设置的。
google 搜索也无济于事。
这会发生,因为你可能有这样的事情
@Component
class RecommendationFilter implements Filter{
}
@Component
class UpcomingFilter implements Filter{
}
所以当你
@Autowired
private Map<String, Filter> filterMap;
spring会自动注入Filter的实例,以bean名称为key,上面类默认的bean名称是recommendationFilter和comcomingFilter。
两种解决方案。
@Component("RECOMMENDATION")
class RecommendationFilter implements Filter{
}
@Component("UPCOMING")
class UpcomingFilter implements Filter{
}
- 从这些 类 中删除
@Component
(请注意。这将使它们成为非 spring bean,不确定这是否是您想要的)
选项 1 是正确的方法。只需按照上面的指示为 bean 命名即可。
通过显式创建映射,您不会利用 spring 的依赖注入魔法。 :)(为什么你想做一些框架正在为你做的事情,这否定了整个控制反转(IOC)原则)
我有配置 class,我在其中创建 Map as 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;
在调试模式下,我可以看到地图有另一个键,由 class 名称:
- 推荐过滤器
- 即将到来的过滤器
但不是 "RECOMMENDATION" 和 "UPCOMING",它是如何在配置中设置的。 google 搜索也无济于事。
这会发生,因为你可能有这样的事情
@Component
class RecommendationFilter implements Filter{
}
@Component
class UpcomingFilter implements Filter{
}
所以当你
@Autowired
private Map<String, Filter> filterMap;
spring会自动注入Filter的实例,以bean名称为key,上面类默认的bean名称是recommendationFilter和comcomingFilter。
两种解决方案。
@Component("RECOMMENDATION") class RecommendationFilter implements Filter{ } @Component("UPCOMING") class UpcomingFilter implements Filter{ }
- 从这些 类 中删除
@Component
(请注意。这将使它们成为非 spring bean,不确定这是否是您想要的)
选项 1 是正确的方法。只需按照上面的指示为 bean 命名即可。
通过显式创建映射,您不会利用 spring 的依赖注入魔法。 :)(为什么你想做一些框架正在为你做的事情,这否定了整个控制反转(IOC)原则)