Springboot中TypeFilter的作用是什么
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇文章为大家展示了Springboot中TypeFilter的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。SpringBootApplicati
千家信息网最后更新 2026年10月31日Springboot中TypeFilter的作用是什么
本篇文章为大家展示了Springboot中TypeFilter的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
SpringBootApplication注解分析
从源代码很容易看出来,它的作用就是自动装配和扫描我们的包,并将符合的类进行注册到容器。自动装配非常简单,这里不做过多分析,接下来分析一下什么叫做符合规则的类。在@ComponentScan注解上面的过滤器类型的定义
public enum FilterType { ANNOTATION, //注解类型 ASSIGNABLE_TYPE, //指定的类型 ASPECTJ, //按照Aspectj的表达式,基本上不会用到 REGEX, //按照正则表达式 CUSTOM; //自定义 private FilterType() { }}excludeFilters排除过滤器
这个是给我们排除符合的类,不让他注册到IOC的时候使用的, Springboot默认使用两个排除过滤器,很简单的,网上随便搜都可以找到相关说明,在这儿我举个特舒列子就行了.
package com.github.dqqzj.springboot.filter;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * @author qinzhongjian * @date created in 2019-07-30 19:14 * @description: TODO * @since JDK 1.8.0_212-b10 */@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface Dqqzj { String value();}package com.github.dqqzj.springboot.filter;import org.springframework.stereotype.Component;/** * @author qinzhongjian * @date created in 2019-07-29 22:30 * @description: TODO * @since JDK 1.8.0_212-b10 */@Dqqzj(value = "dqqzj")@Componentpublic class Tt {}package com.github.dqqzj.springboot.filter;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;/** * @author qinzhongjian * @date created in 2019-07-30 19:13 * @description: TODO * @since JDK 1.8.0_212-b10 */public class MyTypeFilter implements TypeFilter { @Override public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException { if (metadataReader.getAnnotationMetadata().isAnnotated(Dqqzj.class.getName())) { return true; } return false; }} 以上代码是正常逻辑,反过来这样想,如果将Tt类的@Component注解去掉是不是也行的,所以这种排除注解一般都用在正常可以注入到容器的时候进行添加的,那么我们上面说过,脱离Spring也可以注入到容器,该怎么实现呢?
includeFilters包含过滤器
脱离Spring原生注解,将将Tt类的@Component注解去掉
package com.github.dqqzj.springboot.filter;import org.springframework.stereotype.Component;/** * @author qinzhongjian * @date created in 2019-07-29 22:30 * @description: TODO * @since JDK 1.8.0_212-b10 */@Dqqzj(value = "dqqzj")//@Componentpublic class Tt {}透过现象看本质
流程进行梳理一下,注解驱动在注入容器的关键扫描类(注意这里是指的扫描,而不是什么@Bean,@Import等其余注解都是建立在这个基础之上的)
ComponentScanAnnotationParser
ClassPathBeanDefinitionScanner
ClassPathScanningCandidateComponentProvider
ClassPathScanningCandidateComponentProvider#registerDefaultFilters
protected void registerDefaultFilters() { this.includeFilters.add(new AnnotationTypeFilter(Component.class)); ClassLoader cl = ClassPathScanningCandidateComponentProvider.class.getClassLoader(); try { this.includeFilters.add(new AnnotationTypeFilter(ClassUtils.forName("javax.annotation.ManagedBean", cl), false)); this.logger.trace("JSR-250 'javax.annotation.ManagedBean' found and supported for component scanning"); } catch (ClassNotFoundException var4) { } try { this.includeFilters.add(new AnnotationTypeFilter(ClassUtils.forName("javax.inject.Named", cl), false)); this.logger.trace("JSR-330 'javax.inject.Named' annotation found and supported for component scanning"); } catch (ClassNotFoundException var3) { } }上述内容就是Springboot中TypeFilter的作用是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。
注解
容器
过滤器
作用
类型
分析
内容
就是
技能
时候
知识
表达式
装配
简明
接下来
简明扼要
两个
代码
关键
反过来
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
哈尔滨大商圈互联网科技有限公司
重生之互联网科技帝国
国智互联网科技
互联网科技财经
新华互联网科技学院
华宇互联网科技
以房互联网科技
世界互联网领先科技成果
南京欣网互联网科技
字节跳动和互联网科技
成都互联网科技公司工作好不好
无锡工业互联网科技有限公司
山东有哪些互联网科技公司
四川互联网展示科技馆设计
互联网时代科技型公司的机会
互联网科技品牌
互联网科技企业文化
互联网科技快速发展优美句子
科技发展第三阶段互联网时代
武汉亿视互联网科技有限公司
互联网与科技
新华互联网科技学校
科技平台互联网
科技互联网项目
金融科技创新监管互联网金融
金融科技与互联网金融
腾讯科技 互联网女皇
为客找房互联网科技公司怎么样
中国科技和美国互联网
恒生科技指数 中概互联网