【SpringBoot|MyBatisPlus】自动装配遇到的坑

在基于MP搭建新项目的时候,使用Mapper层继承BaseMapper,service层接口继承IService,实现类继承ServiceImpl并实现继承了IService接口的接口。

大概是这样一个结构:

//Entity
class Xxx{}

//Mapper
@Mapper
interface XxxMapper extends BaseMapper<Xxx> {}

//Service
interface XxxService extends IService<Xxx>{}

//ServiceImpl
@Service
class XxxServiceImpl extends ServiceImpl<XxxMapper, Xxx> implements XxxService {}

然后配置在BaseController中自动注入了泛型的IService

结果出现了Bean重复注入的问题:

查看SpringBootApplication.run().getBeanDefinitionNames()后发现,确实是重复注入了,通过查看bean的名称可以知道是service和serviceImpl产生了冲突,这也不难理解,因为这两个都属于IService的派生类,通过IService进行自动装配确实会有这样的风险。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot通过自动装配(auto-configuration)来简化开发者的配置工作。自动装配是Spring框架的一个特性,它可以根据项目的依赖和配置,自动地为我们提供一些常用的功能和配置。 在Spring Boot中,自动装配是通过条件注解(@Conditional)和自动配置类(AutoConfiguration)实现的。当Spring Boot启动时,它会自动扫描classpath下的META-INF/spring.factories文件,该文件中列出了所有自动配置类的全限定名。然后,Spring Boot会根据这些配置类的条件注解来判断是否需要进行自动装配自动配置类一般会使用@Configuration注解进行标识,并且会使用各种条件注解来指定在满足某些条件时才会被加载。 例如,如果我们希望使用Spring Boot自动配置数据库连接池,只需在项目的依赖中添加相应的数据库连接池实现(比如HikariCP),Spring Boot会自动根据这个依赖来进行数据库连接池的配置。 当然,有些情况下我们可能需要自定义一些配置,并且覆盖自动配置的行为。这时可以通过在项目中定义自己的配置类,并使用@Configuration注解来标识。在这个配置类中,可以使用@Bean注解来定义一些需要自动装配的Bean。 总结起来,Spring Boot通过自动装配来简化配置工作,它会根据项目的依赖和配置自动加载相应的配置类,并根据条件注解来判断是否需要进行自动装配。开发者可以通过定义自己的配置类来自定义和覆盖自动装配的行为。这样,我们只需关注业务逻辑的实现,而不用过多关注配置的细节。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值