📌  相关文章
📜  @ComponentScan (1)

📅  最后修改于: 2023-12-03 14:59:07.754000             🧑  作者: Mango

@ComponentScan

@ComponentScan是Spring框架中的一个注解,用于指定要扫描的组件包和配置要自动装配的Bean。

1. 概述

在一个Spring应用程序中,@ComponentScan注解告诉Spring在哪些包中去寻找Spring组件。组件包括使用@Component及其派生注解(如@Service@Repository@Controller等)标记的类。

@ComponentScan注解可以用于配置类上,表示要扫描的基础包或具体的类;也可以用于Spring的XML配置文件中,以指定要扫描的包。

2. 使用示例

2.1 在配置类中使用

@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
    // ...
}
  • @Configuration注解表示这是一个配置类。
  • @ComponentScan注解指定了要扫描的基础包为com.example,Spring将在该包及其子包中寻找组件。

2.2 指定多个包

我们可以使用value属性或basePackages属性来指定多个待扫描的包。

@ComponentScan(basePackages = {"com.example.package1", "com.example.package2"})

2.3 排除特定的包或类

如果希望排除特定的包或类不被扫描到,可以使用excludeFilters属性。

@ComponentScan(basePackages = "com.example", excludeFilters = {
        @ComponentScan.Filter(type = FilterType.REGEX, pattern = "com.example.package3.*"),
        @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = SomeClassToExclude.class)
})

上述示例中,com.example.package3包及其子包中的组件会被排除在扫描范围之外,同时SomeClassToExclude类也会被排除。

3. 扫描规则

@ComponentScan注解遵循以下规则来寻找组件:

  • 默认情况下,寻找被@Component及其派生注解标记的类。
  • 当指定includeFilters属性时,只扫描符合条件的类。
  • 当指定excludeFilters属性时,排除不符合条件的类。
  • 还可以根据注解类型、正则表达式、自定义Filter等规则来过滤组件。
4. 使用XML配置文件
<context:component-scan base-package="com.example" />

在使用XML配置文件时,可以使用<context:component-scan>元素来指定要扫描的包。

5. 扫描结果

使用@ComponentScan注解后,Spring将自动扫描指定包及其子包中的组件,并添加到Bean容器中,可以通过其他注解(如@Autowired)进行依赖注入。

参考资料