Springboot中TypeFilter的作用是什么
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,本篇文章为大家展示了Springboot中TypeFilter的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。SpringBootApplicati
千家信息网最后更新 2025年12月01日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安全错误
数据库的锁怎样保障安全
长沙田志软件开发有限公司
win7装2008数据库
华为服务器raid10
上传服务器后登陆无法实现
云数据库怎么保障安全
网络安全解释名描述
如何打开服务器数据库中的表
关于建立网络安全管理机构
春节防范网络安全提示
乡网络安全自查 情况汇报
芜湖畅游网络技术有限公司
爱博网络技术
网络安全博览会在哪里
scylla数据库连接
网络安全手抄报儿歌七言
雷达数据库系统设计
山东特亿宝互联网科技
软件开发技术状态管理计划
福州博盈网络技术有限公司
软件开发用户故事案例
mongo中如何删除数据库
长宁区一站式金融网络技术服务
交通运输有哪些数据库系统
数据库技术期末试题
怎么用电脑做网页服务器
北京移动软件开发
ftp服务器 强用户管理
软件开发细节
系统软件开发商务网信息网
淄博人力资源软件开发