@ComponentScan
是 Spring 框架中的一个重要注解,用于自动扫描并注册 Spring 容器中的组件。它告诉 Spring 在指定的包(和子包)中查找带有 @Component
及其派生注解(如 @Service
, @Repository
, @Controller
等)的类,并将这些类作为 bean 注册到 Spring 应用上下文中。这样,你就不需要手动注册每个组件。
举个例子:
假设你有一个服务类 MyService
,他在com.example.mypackage
包下,并且标记了 @Service
注解:
@Service
public class MyService {
// class body
}
?你可以创建一个配置类,使用 @Configuration
和 @ComponentScan
:
@Configuration
@ComponentScan("com.example.mypackage")
public class AppConfig {
// 可以包含额外的 @Bean 定义
}
你肯定要疑问?
我springboot项目中没有配置@ComponentScan也能把具有@component类相应bean给注入到容器中啊,不太清楚他有什么实际生产作用?
其实springboot的启动类?上有个@SpringBootApplication
注解,这个注解已经隐式地包含了以下三个注解:
@SpringBootConfiguration
:标记为 Spring Boot 配置类,它是 @Configuration
的特定变体。@EnableAutoConfiguration
:启用 Spring Boot 的自动配置机制。@ComponentScan
:启用组件扫描,默认扫描与主应用类相同包及其子包下的组件。由于 @SpringBootApplication
已经隐式地包含了 @ComponentScan
,因此不需要显式地添加它,除非你想要自定义扫描的包路径。
如果 @ComponentScan
没有指定包路径,它会默认扫描与当前注解所在配置类相同的包和子包。
摸摸人范围应该就是这些同级包所以如果你把代码向上移动就需要手动使用@ComponentScan注解告诉spring要扫描bean加载位置。
如下图,我有一个也是springboot的项目打成jar放在我这个项目中使用了,如果我想使用他这个jar包,我就要手动指定那个jar包内所有业务文件所在包位置,好让jar项目进行自动装配,这样本项目就可以把外来jar融合进来,进行实际调用了。
?
------------------------------------------与正文内容无关------------------------------------
如果觉的文章写对各位读者老爷们有帮助的话,麻烦点赞加关注呗!小弟在这拜谢了!
如果您觉得我的文章在某些地方写的不尽人意或者写的不对,从而让你对你人生观产生颠覆(概不负责),需要斧正,麻烦在评论区不吝赐教,作者看到后会根据您的提示查阅文章进行修改,还这世间一个公理一片蓝天