组件注册@ComponentScan的自动扫描和指定扫描规则
扫描组件@ComponentScan可以自动扫描包以内的含有@Service,@Controller,@Repository,@Component的组件到IOC容器里面去
@ComponentScan有几个重要的参数
1.value:填写要扫描的包(会级联扫描内部所有子包)
2.excludeFilters(排除扫描组件的规则)
里面装的是Filter的数组
Filter有2个属性:
①type:type是枚举类,里面有以下几种属性:
ANNOTATION, 注解,
ASSIGNABLE_TYPE, ANNOTATION:指定的类型,按照给定的类型,不管是子类还是实现类
ASPECTJ, 按照Aspectj的表达式,基本上不会用到按照
REGEX, 按照正则表达式
CUSTOM 自定义规则
②value(或者classes): 类类型的数组
按照前面的type定义的规则来找到对应的类进行排除
3.includeFilters,它的属性和excludeFilters是一样的,不同的是,它需要关闭ComponentScan里面的属性(useDefaultFilters = false)
示例代码:
ANNOTATION:
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Controller;import java.util.ArrayList;
import java.util.concurrent.LinkedTransferQueue;
import java.util.concurrent.TransferQueue;
@ComponentScan(value = "com.debuggg",excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class}),
},useDefaultFilters = false)
ASSIGNABLE_TYPE:指定的类及其所有子类,实现类扫描
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Controller;import java.util.ArrayList;
import java.util.concurrent.LinkedTransferQueue;
import java.util.concurrent.TransferQueue;
@ComponentScan(value = "com.debuggg",excludeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,classes = {UserService.class})
},useDefaultFilters = false)
public class TransferQueueTest {
CUSTOM: 自定义扫描规则
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;import java.util.ArrayList;
import java.util.concurrent.LinkedTransferQueue;
import java.util.concurrent.TransferQueue;
@ComponentScan(value = "com.debuggg",excludeFilters = {@ComponentScan.Filter(type = FilterType.CUSTOM,classes = {MyTypeFilter.class})
},useDefaultFilters = false)
public class TransferQueueTest {
MyTypeFilter.java
package com.debuggg.test1.main3;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;public class MyTypeFilter implements TypeFilter {@Overridepublic 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);//如果扫描到的类里面包含er就加入到ioc容器里面if(className.contains("er")){return true;}return false;}
}
组件注册@ComponentScan的自动扫描和指定扫描规则相关推荐
- 组件注册——@ComponentScan自动扫描组件指定扫描规则
包扫描.只要标注了@Controller.@Service.@Repository,@Component IOCTest.java package com.atguigu.test;import or ...
- 02-组件注册-@ComponentScan-自动扫描组件指定扫描规则
目录 1.配置文件方式:加入context命名空间导入到配置文件 2.主配置类方式:配置类中添加自动扫描组件注解 @ComponentScan 实际在开发中包扫描用的比较多,注解为@Component ...
- Spring注解开发系列Ⅰ--- 组件注册(上)
传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点: 1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文 ...
- spring注解--组件注册
组件注册 1.@Configuration , @Bean 1)xml方式 <?xml version="1.0" encoding="UTF-8"?&g ...
- SpringBoot默认包扫描机制及@ComponentScan指定扫描路径详解
SpringBoot默认包扫描机制及@ComponentScan指定扫描路径详解 SpringBoot默认包扫描机制 标注了@Component和@Component的衍生注解如@Controller ...
- SpringBoot默认包扫描机制及使用@ComponentScan指定扫描路径
SpringBoot默认包扫描机制 标注了@Component和@Component的衍生注解如@Controller,@Service,@Repository就可以把当前的Bean加入到IOC容器中 ...
- spring系列-注解驱动原理及源码-bean组件注册
目录 一.环境初始化 1.环境准备 二.bean的手动注入 1.xml方式注入bean 2.使用@Configuration&@Bean方式注入bean 三.自动扫描注册组件及bean 1.使 ...
- Spring注解驱动:组件注册(一)
文章目录 1.Spring简单环境 2.Spring注解容器 2.1 代码示例 2.2 给容器注册组件4种方式 2.2.1 工厂创建对象 2.3 声明周期 2.3.1 Bean指定初始化和销毁方法 2 ...
- 实验16:使用context:include-filter指定扫描包时要包含的类 实验17:使用context:exclude-filter指定扫描包时不包含的类
实验17:使用context:exclude-filter指定扫描包时不包含的类 扫描的时候可以排除一些不要的组件 type="annotation" 指定排除规则,按照注解进行排 ...
最新文章
- nbiot开发需要掌握什么_包装设计需要掌握什么技巧
- WP8.1学习系列(第八章)——透视Pivot设计指南
- hdu 2064汉诺塔III 递推
- 递归和迭代路由_静态路由在以太网接口中的不同书写会导致路由器怎样的操作结果?...
- mysql多表联合删除
- 使用Server 2008新GPO做驱动器映射
- c++怎么实现数字数组的删除数字_C/C++数据结构:栈结构解析,最简单解析,让你一遍就会...
- php在线考试系统模板下载,PHPEMS在线模拟考试系统 v6.1
- OpenGL ES SDK for Android - 4
- 不只是新车,2019上海车展还有这些彩蛋 | 一级供应商、科技公司篇
- python cprofile_python 中 cprofile 分析 多进程程序
- oracle弱口令攻击
- python PPT批量制作封面图及导出视频教程
- MySQL8安装详细步骤
- rpc调用 java_RPC调用的简单实现
- Js 摄氏度和华氏度的转换
- 红米手机4X获得Root权限的流程
- 小鸡啄米之React事件处理
- 消除VMware启动虚拟机时的floppy0提示的方法
- Python中以字母r/R,或字母u/U 开头的字符串
热门文章
- 2021年量子计算机奖,中兴通讯携手中国移动共获“2021年未来网络领先创新科技成果”奖...
- 通过Server 2019中的组策略部署桌面墙纸 详解组策略环回处理
- 载 Kubernetes和OpenStack到底是什么关系?先搞清楚,再系列学习
- Java基础学习总结(113)——异常最佳实践
- Java Web学习总结(34)——拦截器和过滤器的差异总结
- Ehcache学习总结(2)--Ehcache整合spring配置
- JNDI学习总结(4)——Tomcat下使用Druid配置JNDI数据源
- order是mysql系统关键字_MySQL数据库如何使用“ORDER BY”关键字对查询结果进行排序呢?...
- unity的inputField文本框赋值问题
- Perl内置特殊变量