springboot注解@ComponentScan注解作用

一 ComponentScan作用

1.1 ComponentScan注解作用

默认情况下,项目会默认扫描@SpringBootApplication注解所在路径的同级和下级的所有子包,使用@ComponentScan后,它会取代掉默认扫描。
@ComponentScan 是Spring框架的注解,它的作用是扫描指定的包路径下的标有 @Component、@Service、@Repository 和 @Controller 等注解的类,并注册为bean。
如果接口类即使加上了 @Component 注解,也不会被实例化为 bean,这是因为 Spring 容器不会将接口当作 bean 来处理。Spring 需要的是能够实例化和管理的类,而接口不能被实例化。

二  案例操作

2.1 @ComponentScan扫描包路径下的类

2.1.1 工程结构以及问题描述

在A工程调用B工程的sdk包,启动时报无法扫描工程B中的类

1)B工程作为sdk包:

2)A工程结构

3)A工程作为调用类:原因在于:

A工程启动类上的@SpringbootApplication注解所在的包路径为:com.jurf.ms.test

引用B工程sdk的包路径为:com.jurf.ms.api.saobao

二者之间的包路径不一致导致的。

2.1.2 解决办法

1.在启动使用@componentscan注解,添加扫描本工程的路径,以及引用sdk具体类的路径。

项目会默认扫描@SpringBootApplication注解所在路径的同级和下级的所有子包,使用@ComponentScan后他会取代掉默认扫描。

2.验证:

2.2 @ComponentScan扫描包路径下的接口

2.2.1 工程结构以及问题描述

1.B工程添加一个接口类型

2.A工程引用B工程的接口

3.A工程启动:原因在于:如果接口类即使加上了 @Component 注解,也不会被实例化为 bean,这是因为 Spring 容器不会将接口当作 bean 来处理。Spring 需要的是能够实例化和管理的类,而接口不能被实例化。

 2.2.2 解决办法

1.如果你需要将接口作为 bean 使用,可以创建一个实现该接口的类,并在该类上使用 @Component 或其他相应的注解(如 @Service@Repository 等)。

创建接口的实现类

2.工程A再次启动,访问

启动没有问题:

能够正确访问:

三  参考案例

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值