📅  最后修改于: 2023-12-03 14:59:07.754000             🧑  作者: Mango
@ComponentScan
是Spring框架中的一个注解,用于指定要扫描的组件包和配置要自动装配的Bean。
在一个Spring应用程序中,@ComponentScan
注解告诉Spring在哪些包中去寻找Spring组件。组件包括使用@Component
及其派生注解(如@Service
,@Repository
,@Controller
等)标记的类。
@ComponentScan
注解可以用于配置类上,表示要扫描的基础包或具体的类;也可以用于Spring的XML配置文件中,以指定要扫描的包。
@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
// ...
}
@Configuration
注解表示这是一个配置类。@ComponentScan
注解指定了要扫描的基础包为com.example
,Spring将在该包及其子包中寻找组件。我们可以使用value
属性或basePackages
属性来指定多个待扫描的包。
@ComponentScan(basePackages = {"com.example.package1", "com.example.package2"})
如果希望排除特定的包或类不被扫描到,可以使用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
类也会被排除。
@ComponentScan
注解遵循以下规则来寻找组件:
@Component
及其派生注解标记的类。includeFilters
属性时,只扫描符合条件的类。excludeFilters
属性时,排除不符合条件的类。<context:component-scan base-package="com.example" />
在使用XML配置文件时,可以使用<context:component-scan>
元素来指定要扫描的包。
使用@ComponentScan
注解后,Spring将自动扫描指定包及其子包中的组件,并添加到Bean容器中,可以通过其他注解(如@Autowired
)进行依赖注入。