Springboot中TypeFilter的作用是什么
发表于:2025-02-22 作者:千家信息网编辑
千家信息网最后更新 2025年02月22日,本篇文章为大家展示了Springboot中TypeFilter的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。SpringBootApplicati
千家信息网最后更新 2025年02月22日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安全错误
数据库的锁怎样保障安全
视频平台服务器
bc服务器
梦幻西游可转服务器是固定的吗
全球服务器dns大全
关于网络安全的相关法规
购买网络技术联系方式
炳基软件开发有哪些
华为云服务器建设在哪里
网络安全态势评估仿真
智慧物流应用的无线网络技术
广州网络安全保障培训机构
安康软件开发商家
电脑服务器更改了怎么找回之前的
山东前端软件开发哪家好
软件开发电脑教程
sql数据库技术实训
计算机软件开发的法侓法规
拼就赚软件开发
晋城软件开发怎么样
计算机数据库学习
福州3d相机软件开发
网络安全检查都检查什么
数据库审计 标准
服务器缓存硬盘怎么做
随着网络技术的发展英文
搞软件开发的励志文章
莫小密网络技术有限公司
网络安全有限公司营业范围
中北大学大数据库
网络安全法开始实施的是