Spring- @Component和@ComponentScan注解用法介绍和注意事项

本文将了解到:

  1. Component是什么?
  2. ComponentScan是什么?
  3. 为什么ComponentScan很重要?
  4. 项目中Spring Boot会对哪些包自动执行扫描(Component Scan)?
  5. 如何利用Spring Boot定义扫描范围?
  6. @Component and @ComponentScan 的区别
1.@Component

@Component 被称为元注释,它是@Repository、@Service、@Controller、@Configuration的父类,理论上可以使用@Component来注释任何需要Spring自动装配的类。
主要作用是:

将普通JavaBean注入到spring容器中,Spring容器统一管理,用起来不用自己new了,相当于配置文件中的 <bean id="" class=""/>

2.@ComponentScan

@ComponentScan注解一般用在Spring项目的核心配置类,或者在Spring Boot项目的启动类里使用。相当于配置文件中的 <context:component-scan>标签。
 
主要作用是:

用于完成组件扫描,指定spring扫描范围,通过它指定的路径,Spring会从被指定的包及其下级包扫描@Component及其子类注释的类,用于Spring容器自动装配,也就是告诉Spring从哪里找到bean。

不过需要注意,其仅仅是指定了要扫描的包,并没有装配其中的类,这个真正装配这些类是@EnableAutoConfiguration 完成的

在SpringBoot项目的启动类中通常使用了标签@SpringBootApplication,而它是一个组合注解,其中就包含@ComponentScan注解。因此SpringBoot启动时会自动帮你把app启动类所在包及其下级包都扫描了。
在这里插入图片描述
举个例子:
在这里插入图片描述
TyhApplication类在com.abc包下,并且使用@SpringBootApplication标签,该标签定义了spring将自动扫描com.abc及其子类包下的全部标有 @Component注解 的类,并注册成bean。
我们可以通过basePackages等属性来细粒度的定制@ComponentScan自动扫描的范围,如果不指定,则默认Spring框架实现会从声明@ComponentScan所在类的package进行扫描。
有两种情况要注意:
1.如果你定义的类在com.abc包下,则不需要额外操作
2.假如你定义的类不再在com.abc包下(比如com.tyh),但需要需要被扫描到,则需要显示的使用@ComponentScan标签,重新指定扫瞄范围。
有两种方法实现,
1.扩大扫描范围
在这里插入图片描述
2.直接指定需要扫描路径
在这里插入图片描述
特别注意的是如果显示的使用@ComponentScan指定扫描路径,则springboot启动只会扫描指定的路径。比如2中若只定义了com.abc,则扫描时只会扫描com.tyh,不会扫描com.abc,@SpringBootApplication中包含的@ComponentScan失效。

@Component and @ComponentScan 的区别
 @Component标记了,哪些类需要被扫描,@ComponentScan指定了哪些包路径下的标记类可以被扫描;(前者关注具体类,后者关注包路径)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值