Spring boot中服务层interface与对应的impl

2019-05-09  本文已影响0人  小偷阿辉

错误日志如下

required a single bean, but 2 were found

expected single matching bean but found 2

报错信息有

image.png

意思是服务成interface和对应的impl 类单例冲突了,就是两个相同类型的bean,导致使用@Autowired注解无法找到相应的bean

大家熟悉一下三个扫描装配bean的Spring 注解

@ServletComponentScan(basePackages="com.shine")

Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,无需其他代码,如上,com.shine包层级一下的的都会被扫描装配

@MapperScan(basePackages="com.shine")

该注解来扫描注册mybatis数据库接口类,其中basePackages属性表明接口类所在的包,扫描的包的接口都会被装配到Spring beansFactory中

@ComponentScan(basePackages="com.shine")

该注解主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中,意思就是@Component的封装注解也是会被扫描装配,例如@Repository @Service @Controller

了解以上,大家应该恍然大悟知道为什么会出现Bean冲突了,就是扫描包出现的问题,一定要认真检查

如果以上未解决问题,可能就是interface有多个实现类 这类问题需要在@Autowired上添加@Qualifier("你的service名称")配合使用

上一篇 下一篇

猜你喜欢

热点阅读