我有一个 Boot 应用程序,在我的一个外观中,我尝试自动连接conversionService
,如下所示:
@Autowired
private ConversionService conversionService;
结果我得到了这个:
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [org.springframework.core.convert.ConversionService] is defined: expected single matching bean but found 3: mvcConversionService,defaultConversionService,integrationConversionService
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1061)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:949)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533)
... 16 more
为了克服这一点,我添加了一个类似的限定符:
@Autowired
@Qualifier("mvcConversionService")
private ConversionService c;
所有的转换器都是自动添加到mvcConversionService
的,现在我想扩展ConversionService
并添加另一个方法,但是我的转换器再次添加到mvcConversionService
。有没有办法告诉spring-boot使用哪个conversionService
来自动注册我的转换器?我不知道I don“我不想手动列出新conversionService
的所有转换器。
4条答案
按热度按时间lsmepo6l1#
我也遇到过类似的问题。问题似乎是你需要定义你想使用哪个转换服务。你可以通过XML或者使用Sping Boot 配置来完成。
我在这里复制了一个非常similar question(对我有效的那个)的部分答案,并将这个问题标记为可能重复。
查看Spring文档后会发现,您应该声明一个
ConversionService
bean。在XML配置中,它将如下所示:1rhkuytd2#
如果你要找的是一个转换器列表,而且它们都实现了相同的接口,你可以在列表中自动连接。
例如:
并根据需要对它们进行迭代。
它的一个很好的特性是,当添加新的实现时,您不需要更新使用它们的代码。
o8x7eapl3#
说明
Spring将尝试为应用程序自动创建ConversionService(在您的情况下为mvcConversionService)。它没有用于注册转换器的限定符,因此如果您创建实现以下类型之一的组件/Bean,它将自动注册到服务。
1.转换器
1.通用转换器
1.打印机
1.解析器
解决方案1
忽略它。如果将这些转换器注册到mvcConversionService没有任何损害,则可能不值得您花时间来解决此限制。您的转换器类可能会被闲置。
解决方案2
重新产生您自己的界面。您可以复制ConversionService和Converter的界面,并以您喜欢的方式命名它们。当然,功能是相同的,但这会防止您的Converter类别插入任何其他ConversionService执行严修。
q7solyqu4#
因为我在Spring集成中也遇到了这个问题,所以我对这个解决方案不是很满意,但这是一个快速的解决方案。
如果您的某些逻辑需要其他ConversionService实现,则会出现问题。但是,这可以通过使用@Qualifier注解来解决。