关于@ComponentScan注解的用法及作用说明

 更新时间:2023年09月22日 09:41:47   作者:叶枫^_^  
这篇文章主要介绍了关于@ComponentScan注解的用法及作用说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

@ComponentScan的作用

@ComponentScan(param)

告诉Spring 哪个packages 的用注解标识的类 会被spring自动扫描并且装入bean容器,param即用来指定扫描包的范围。

此注解一般和@Configuration注解一起使用

指定Spring扫描注解的package。

如果没有指定包,那么默认会扫描此配置类所在的package。

注:

@Configuration注解申明当前类是一个配置类,相当于xml配置文件。

@ComponentScan和@Configuration一起使用的原因就是基于Spring2.0中的注解配合xml配置文件的实现一样,即在xml配置文件配置ComponentScan包扫描属性。

例如:

如果类中用了@Controller,@Repository,@Service,@Component四大注解标识之一了,那么如果不加上@ComponentScan,Spring就不会自动扫描类上的四大注解中的任何一个,那么四大注解下的类就不会被Spring扫描到,更不会装入Spring容器中,因此你配置的四大注解就失去了作用。

@ComponentScan注解在使用时的一些误解与分析

1.心血来潮写了几行代码,但是却出现了一个spring框架的问题,是关于spring中自动注入的问题。

2.我当时找了好久都没有找到,后来发现了问题。

3.我的代码结构是SpringBoot多模块结构。

4.我有两个模块:mall_admin,mall_common,我的mall_admin和mall_common两个模块共同隶属于mall_parent父模块。

5.我的mall_admin模块里面声明了mall_common依赖,同时mall_admin模块里面写了运行类,mall_common为通用模块,一般用作调用使用。

6.我的mall_admin的包结构为cn.xhc.mall.mall_admin.*(*可以为controller,service,service.impl,config,dao等),同时我的运行类是在cn.xhc.mall.mall_admin包里面。

7.我的mall_common的包结构为cn.xhc.mall.mall_common.*(*可以为config,utils,service,service.impl等)。

8.我在mall_admin里面的service层自动注入mall_common里面的service层的类,但是却报注入失败的错误。

9.我起初找了很久,并且还在启动类上加上了@ComponentScan注解,并标记上了包名,但是还是找不到自动注入失败的错误。

10.我一直以为是我的mall_common模块里面service层的代码写错误,所以才导致自动注入不成功。

11.但是我找了好久,没有发现错误的地方,这令我十分郁闷,我尝试了许多方法,甚至尝试使用@Import注解,但是还是没有成功。

最后我终于发现了原因,其实我使用@ComponentScan注解并没有什么问题,但是我的启动类放在了错误的包下面,最开始我将我的启动类放在了cn.xhc.mall.mall_admin下面,但是mall_common中的service放在了cn.xhc.mall.mall_common.service包中,所以我扫描不到mall_common中的@Service注解,因为自动扫描只会扫描启动类同级或者启动类下面的包中的spring注解,所以只能扫描到cn.xhc.mall.mall_admin同级或者下面的包中的spring注解,而我的mall_common中service是在cn.xhc.mall.mall_common中,所以扫描不到,不能注册为spring中的bean对象,所以不能再mall_admin中的service中自动注入mall_common中的service。

最后我将启动类放在cn.xhc.mall包下,并加上@ComponentScan注解,成功解决问题。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java语言中的内存泄露代码详解

    Java语言中的内存泄露代码详解

    这篇文章主要介绍了Java语言中的内存泄露代码详解,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • Spring框架概述及核心设计思想分享

    Spring框架概述及核心设计思想分享

    Spring框架是一种开源的Java企业级应用开发框架,提供了IoC(控制反转)容器和DI(依赖注入)等核心设计思想,SpringBoot则是在Spring基础上进一步简化配置,提供了快速开发、内置服务器等功能,学习Spring框架需要掌握容器、IoC和DI等概念,以及分层设计等软件工程思想
    2025-02-02
  • java实现连连看游戏

    java实现连连看游戏

    这篇文章主要为大家详细介绍了java实现连连看游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Fluent Mybatis实现环境隔离和租户隔离

    Fluent Mybatis实现环境隔离和租户隔离

    我们在实际的业务开发中,经常会碰到环境逻辑隔离和租户数据逻辑隔离的问题。本文就详细的来介绍一下,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 解决@FeignClient注入service失败问题

    解决@FeignClient注入service失败问题

    这篇文章主要介绍了解决@FeignClient注入service失败问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 快速掌握Java8中的Optional

    快速掌握Java8中的Optional

    Optional 是一个容器类,代表一个值存在或不存在,Optional并不是用来替换所有的null,而是为了在设计良好的API中更明确地表达可能缺失的值,这篇文章主要介绍了Java8的Optional及使用,需要的朋友可以参考下
    2023-07-07
  • CodeGPT + IDEA + DeepSeek如何在IDEA中引入DeepSeek实现AI智能开发

    CodeGPT + IDEA + DeepSeek如何在IDEA中引入DeepS

    文章介绍了如何在IDEA中使用CodeGPT和DeepSeek插件实现AI智能开发,具体内容包括安装步骤、配置APIkey和参数设置等,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-02-02
  • 解决java Graphics drawImage 无法显示图片的问题

    解决java Graphics drawImage 无法显示图片的问题

    这篇文章主要介绍了解决java Graphics drawImage 无法显示图片的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java聊天室之实现运行服务器与等待客户端连接

    Java聊天室之实现运行服务器与等待客户端连接

    这篇文章主要为大家详细介绍了Java简易聊天室之实现运行服务器程序与等待客户端程序连接功能,文中的示例代码讲解详细,需要的可以了解一下
    2022-10-10
  • SpringBoot+MyBatisPlus+MySQL8实现树形结构查询

    SpringBoot+MyBatisPlus+MySQL8实现树形结构查询

    这篇文章主要为大家详细介绍了SpringBoot+MyBatisPlus+MySQL8实现树形结构查询,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06

最新评论