记录一次注解扫描范围和泛型依赖注入问题

启动项目失败,查看了一下是注解扫描范围和泛型依赖注入的问题,遂记录一下。
失败的原因代码部分:

public class AService extends BaseService<BEntity>{

}

这里A类服务继承了B类实体的基础服务类。但是没有加上@Service,导致没有被扫描并放入Spring容器中进行管理,所以导致Controller层在进行@Autowire自动装配时失败了。
加上注解之后,发现仍然存在问题。这次是因为BEntity没有实现对应的Dao层。

一开始这里还以为要写成这样才可以:

@Service
public class AService extends BaseService<AEntity>{

}

以为必须要前缀名对齐才行,但其实不是。这两种写法都可以,但必须确认对应的持久层存不存在,若不存在,则会报错。因为Mybatis会根据泛型依赖注入,去寻找对应的Repository文件。

public interface ARepository extends Mapper<AEntity> {

}

但为什么要遵循这个规则?
关键就在于“extends BaseService<AEntity>"的后半部分:BaseService<AEntity>。
泛型类BaseService<T> 有个成员变量,类型为Mapper<T>(也可以用BaseRepository<T>实现) , 任何实现了Mapper<T>的子类,例如ARepository extends Mapper<A> 指定了泛型类型,即子类BaseReposiotry可以放入Spring容器,然后注入给BaseRepository类型的变量。所以这一部分的实现是不可或缺的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值