Spring的组件扫描注解
2019-08-16 11:43:19来源:博客园 阅读 ()
Spring的组件扫描注解
通过在类上加注解 @ComponentScan 来扫描 Spring 的组件类。
@ComponentScan 的可选参数
- basePackages:指定需要扫描的根包目录,其子目录也会被扫描,默认路径为 @ComponentScan 注解类目录,及其子目录
- value:basePackages 的别名
- basePackageClasses:指定需要扫描的根类目录,其子目录也会被扫描
- lazyInit:是否懒加载,默认 false
- useDefaultFilters:是否启用自动扫描组件,默认 true;false 表示只应用下面指定的过滤规则
- excludeFilters:指定不需要扫描的组件类型(详见 @Filter 配置)
- includeFilters:指定需要扫描的组件类型(详见 @Filter 配置)
- scopedProxy:代理模式 ScopedProxyMode
- DEFAULT:默认,一般就是 NO
- NO:不需要创建代理
- INTERFACES:创建 JDK 代理
- TARGET_CLASS:利用 CGLIB 创建代理
- nameGenerator:指定实现了接口 BeanNameGenerator 的类,可以用来定义 BeanName 的生成规则
- scopeResolver:指定实现了接口 AnnotationScopeMetadataResolver 的类,可以配置作用域 scope,和代理模式 scopedProxy
- resourcePattern:用来匹配合适的组件,默认为 **/*.class,推荐使用 includeFilters 和 excludeFilters
配置多个 @ComponentScan 的方法
下面三种方式都可以
@ComponentScans(
@ComponentScan({"com.xxx.aaa","com.xxx.bbb"})
)
@Configuration
public class Config {}
@ComponentScan({"com.xxx.aaa","com.xxx.bbb"})
@Configuration
public class Config {}
@ComponentScan({"com.xxx.aaa"})
@ComponentScan({"com.xxx.bbb"})
@Configuration
public class Config {}
配置过滤器 @Filter
1、过滤 @Service 注解类
@Configuration
@ComponentScan(
excludeFilters = {
@Filter(type = FilterType.ANNOTATION, classes = Service.class)
}
)
public class Config {}
2、过滤 Dog 类
@Configuration
@ComponentScan(
excludeFilters = {
@Filter(type = FilterType.ASSIGNABLE_TYPE, classes = Dog.class)
}
)
public class Config {}
3、正则匹配,过滤后缀为 a 的类
@Configuration
@ComponentScan(
excludeFilters = {
@Filter(type = FilterType.REGEX, pattern = {"..*a"})
}
)
public class Config {}
4、自定义过滤规则类,过滤包含 a 的类
@Configuration
@ComponentScan(
excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = MyFilterType.class)
}
)
public class Config {}
// 实现 TypeFilter 自定义规则:过滤包含 a 的 BeanName
public class MyFilterType implements TypeFilter 自定义规则 {
@Override
public boolean match(MetadataReader reader, MetadataReaderFactory factory) throws IOException {
return reader.getClassMetadata().getClassName().contains("a");
}
}
一个例子
配置类 Config,有如下规则:
- 需要扫描包路径
com.xxx.aaa
、com.xxx.bbb
- 排除
com.xxx.aaa
路径下的@Service
注解类和Dog
类 com.xxx.bbb
不启用自动扫描,但是需要包含Cat
类
@ComponentScan(
value = {"com.xxx.aaa"},
excludeFilters = {
@Filter(type = FilterType.ANNOTATION, classes = Service.class),
@Filter(type = FilterType.ASSIGNABLE_TYPE, classes = Dog.class)
}
)
@ComponentScan(
value = {"com.xxx.bbb"},
useDefaultFilters = false,
includeFilters = {
@Filter(type = FilterType.ASSIGNABLE_TYPE, classes = Cat.class)
}
)
@Configuration
public class Config {
}
原文链接:https://www.cnblogs.com/bigshark/p/11286298.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Spring中FactoryBean的作用和实现原理
下一篇:Shiro权限框架
- Spring系列.ApplicationContext接口 2020-06-11
- springboot2配置JavaMelody与springMVC配置JavaMelody 2020-06-11
- 给你一份超详细 Spring Boot 知识清单 2020-06-11
- SpringBoot 2.3 整合最新版 ShardingJdbc + Druid + MyBatis 2020-06-11
- 掌握SpringBoot-2.3的容器探针:实战篇 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash