@ComponentScan注解用法介绍


prtyaa
prtyaa 2023-12-25 12:25:03 64213
分类专栏: 资讯

今天给大家分享Spring中@ComponentScan注解的用法,希望对大家能有所帮助!

1、@ComponentScan注解的作用

@ComponentScan注解一般和@Configuration注解一起使用,主要的作用就是定义包扫描的规则,然后根据定义的规则找出哪些需类需要自动装配到spring的bean容器中,然后交由spring进行统一管理。

说明:针对标注了@Controller、@Service、@Repository、@Component 的类都可以别spring扫描到。

2、@ComponentScan注解属性介绍

2.1 value

指定要扫描的包路径

2.2 excludeFilters(排除规则)

excludeFilters=Filter[] 指定包扫描的时候根据规则指定要排除的组件

2.3 includeFilters(包含规则)

includeFilters =Filter[] 指定包扫描的时候根据规则指定要包含的组件.

注意:要设置useDefaultFilters = false(系统默认为true,需要手动设置) includeFilters包含过滤规则才会生效。

2.4 FilterType属性

FilterType.ANNOTATION:按照注解过滤

FilterType.ASSIGNABLE_TYPE:按照给定的类型,指定具体的类,子类也会被扫描到

FilterType.ASPECTJ:使用ASPECTJ表达式

FilterType.REGEX:正则

FilterType.CUSTOM:自定义规则

useDefaultFilters: 配置是否开启可以对加@Component,@Repository,@Service,@Controller注解的类进行检测, 针对Java8 语法可以指定多个@ComponentScan,Java8以下可以用 @ComponentScans() 配置多个规则

3、示例

3.1 各种过滤过滤规则示例

// includeFilters 用法 包含Animal.class类可以被扫描到,包括其子类@ComponentScan(value = "com.spring" includeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {Animal.class})}) // excludeFilters 用法 排除包含@Controller注解的类@ComponentScan(value = "com.spring" , excludeFilters = { @ComponentScan.Filter(type = FilterType.ANNOTATION , classes = {Controller.class} ), }) // ComponentScans用法@ComponentScans( value = { @ComponentScan(value = "com.spring" , includeFilters = { @ComponentScan.Filter(type = FilterType.ANNOTATION , classes = {Controller.class} ) }, useDefaultFilters = false) , @ComponentScan(value = "com.spring" , excludeFilters = { @ComponentScan.Filter(type = FilterType.ANNOTATION , classes = { Repository.class} ) }) })*/ // @ComponentScan // 针对Java8 语法可以指定多个@ComponentScan,Java8以下可以用 //@ComponentScans() 配置多个规则@ComponentScan(value = "com.spring" , excludeFilters = { @ComponentScan.Filter(type = FilterType.ANNOTATION , classes = {Controller.class, Controller.class} ), }, includeFilters = { @ComponentScan.Filter(type = FilterType.ANNOTATION , classes = {Controller.class, Controller.class} ), })

 

 

3.2 自定义过滤规则 需要新建 TestTypeFilter.java

package com.spring.config; import org.springframework.core.io.Resource;import org.springframework.core.type.AnnotationMetadata;import org.springframework.core.type.ClassMetadata;import org.springframework.core.type.classreading.MetadataReader;import org.springframework.core.type.classreading.MetadataReaderFactory;import org.springframework.core.type.filter.TypeFilter; import java.io.IOException; /** * metadataReader 读取到当前正在扫描的类信息 * metadataReaderFactory 可以获取到其他任何类的信息 */public class TestTypeFilter implements TypeFilter { public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException { //获取当前类注解信息 AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata(); // 获取当前正在扫描的类信息 ClassMetadata classMetadata = metadataReader.getClassMetadata(); // 获取当前类资源信息(比如类的文件路径) Resource resource = metadataReader.getResource(); String className = classMetadata.getClassName(); System.out.println("类名:" + className); if (className.contains("controller")) { return true; } else { return false; } }}

 

 

3.3 新建测试类 TestComponentScan.java

package com.spring.test; import com.spring.config.TestComponentScanConfig;import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class TestComponentScan { public static void main(String[] args) { AnnotationConfigApplicationContext annotationContext = new AnnotationConfigApplicationContext(TestComponentScanConfig.class); String[] names = annotationContext.getBeanDefinitionNames(); for (String name : names) { System.out.println(name); } }}

 

具体的运行效果可以查看控制台输出结果,是否和预期的一样,具体有不清楚的欢迎沟通交流。

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=30146
赞同 0
评论 0 条
prtyaaL0
粉丝 1 发表 2554 + 关注 私信
上周热门
银河麒麟添加网络打印机时,出现“client-error-not-possible”错误提示  1448
银河麒麟打印带有图像的文档时出错  1365
银河麒麟添加打印机时,出现“server-error-internal-error”  1151
统信桌面专业版【如何查询系统安装时间】  1073
统信操作系统各版本介绍  1070
统信桌面专业版【全盘安装UOS系统】介绍  1028
麒麟系统也能完整体验微信啦!  984
统信【启动盘制作工具】使用介绍  627
统信桌面专业版【一个U盘做多个系统启动盘】的方法  575
信刻全自动档案蓝光光盘检测一体机  483
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

添加我为好友,拉您入交流群!

请使用微信扫一扫!