Spring系列(三):@ComponentScan注解用法介绍

       91aad27cd0e386691e84cf2a779aba51.png         

目录

1、@ComponentScan注解的作用

2、@ComponentScan注解属性介绍

2.1 value

2.2 excludeFilters(排除规则)

2.3 includeFilters(包含规则)

2.4 FilterType属性

3、示例

3.1 各种过滤过滤规则示例

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

3.3 新建测试类  TestComponentScan.java


今天给大家分享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);}}
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/270175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机知识:手机的快充技术是什么,看完本文你就懂了

目录 1、什么是手机快充? 2、目前主流的手机快充协议 2.1 PD协议 2.2 PE协议 (联发科) 2.3 QC协议 (高通) 2.4 VOOC闪充 (OPPO厂商) 2.5 SCP/FCP闪充 (华为厂商) 2.6 Fla…

Axure RP 的安装与卸载

官网:http://www.axure.com/download 支持Windows和Mac转载于:https://www.cnblogs.com/sherrykid/p/6274898.html

手机技巧:如何有效清理手机的垃圾文件

大家经常碰到手机内存不够用,相信很多人都只会做些表面清理,比如删照片和视频、用手机管家清理等等,但这样的清理方法效果很不理想,基本清理不少多少垃圾文件。 当然,有的朋友会在手机内存空间不足的时候,就…

Android框架式编程之MVP架构

MVP是Google官方发布的Android开发相关的架构知识。本文要讲解的是一种最基本的MVP的实现方式,它使用手动的依赖注入来提供具有本地和远程数据源的存储库。异步任务处理回调。 基本的MVP示例项目地址:https://github.com/googlesamples/android-architec…

硬件知识:什么是扩展坞,看完你就明白了

目录 1、什么是扩展坞? 2、为什么会出现扩展坞? 3、扩展坞支持哪些接口? 4、笔记本PCI扩展坞的功能 5、笔记本PCI扩展坞的优点 1、什么是扩展坞? 扩展坞(Docking StaTIon)主要用来扩展笔记本电脑功能的数码…

Union和Union All到底有什么区别

union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序; UNI…

前端工具:推荐几款UI设计师好用的设计软件

目录 1. Pixso 2. Figma 3.XD 4. Sketch 5、LR 修图神器 推荐几款UI设计师好用的设计软件,感兴趣的朋友可以下载试试! 1. Pixso Pixso是一款综合设计能力超强的一个设计平台,它包含了原型、设计、交付、协作、资源管理一体化等众多的功能于一…

pat 1037

如果你是哈利波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易。”现在,给定哈利应付的价钱P和他实付的钱A&…

mysql新增语句

1:方式一 2:方式2

手机知识:NFC是功能介绍

1、NFC简介 NFC是Near Field Communication英文缩写,也就是近距离无线通信技术。由飞利浦和索尼公司共同研发的。NFC属于一种非接触式识别和互联通信技术,通常在移动设备、消费类电子产品、智能硬件工具间进行近距离无线通信。 2、NFC的用途 NFC只是提供…

struts-resultType属性

1.默认dispatcher:forward方式,服务器端跳转 2.redirect:客户端跳转 3.chain:Action转发,forward方式,服务器端跳转action 4.redirectAction:客户端跳转Action 转载于:https://www.cnblogs.com/-beauTiFul/p/6282295.html

手机技巧:关机后的手机还能被定位吗,看完你就懂了

目录 1、手机定位原理 2、如何避免被定位? 大家有没有发现,自己每安装一个手机软件,当你在首次打开的时候一般它都会要求你开启一些权限,最常见的权限就是包括通话、短信以及定位服务的权限。 其中定位服务往往是根据运营商基站的…

有意思的故事

1、http://tieba.baidu.com/p/2359440213?see_lz1&pn1 2、http://tieba.baidu.com/p/2622543838?see_lz1&pn2转载于:https://www.cnblogs.com/weizhxa/p/6282432.html

硬件知识:USB3.0和USB2.0的区别

目录 1、USB的概念介绍 2、USB2.0的特点 2.1、什么是USB2.0 2.2 USB2.0的引脚定义 3、USB3.0的特点 3.1、USB3.0介绍 3. 2、USB3.0的引脚定义 4、USB.2.0和USB3.0的区别 4.1 外观方面 4.2 USB插口引脚方面 4.3 USB公口的外观方面 1、USB的概念介绍 USB是计算机公司和通信公司在…

APP:分享六款非常实用的冷门APP软件,值得一试

目录 1、泼辣修图 2、颜咚- 实用工具合集 3、Tapet-桌面美化神器 4、Lightroom -图片处理神器 5、黑域-手机系统加速神器 6、疯狂番茄-任务管理神器 今天小编给大家分享分享六款非常实用的冷门APP软件,值得一试! 1、泼辣修图 泼辣修图是一款非常专业的手…

有理数分解-数论

题目描述 Description 任何一个[0,1]中的有理数p/q(p、q均为自然数)一定可以分解成1/r11/r21/r3…1/rk&#xff0c;且r1<r2<r3<…<rk。当然这样的分解不是唯一的&#xff0c;如5/61/21/31/21/51/81/120&#xff0c;第一个分解式中的第二项比第二个分解式中的第二项…

Spring系列(四):@Scope注解用法介绍

今天给大家分享Spring中Scope注解的用法&#xff0c;希望对大家能有所帮助&#xff01; Scope 定义以及作用 Scope注解主要作用是调节Ioc容器中的作用域&#xff0c;在Spring IoC容器中主要有以下五种作用域&#xff1a;基本作用域&#xff1a;singleton&#xff08;单例&#…