@ComponentScan(value = "com.annotation",useDefaultFilters = false,includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class,ControllerAdvice.class})})

上面的FilterType都包含了哪些类型呢?

ANNOTATION:注解类型
ASSIGNABLE_TYPE:ANNOTATION:指定的类型
ASPECTJ:按照Aspectj的表达式,基本上不会用到
REGEX:按照正则表达式
CUSTOM:自定义规则

下面说一下CUSTOMER类型的用法:

具体的配置可以这样写:

@ComponentScan(value = "com.annotation",useDefaultFilters = false,
        includeFilters = {
//            @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class,ControllerAdvice.class}),
//            @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,classes = {PersonDao.class}),
            @ComponentScan.Filter(type = FilterType.CUSTOM,classes = {MyFilterType.class})

 其中MyFilterType是我自己写的一个类,它需要实现TypeFilter接口,实现接口需要重写一个方法match(),当match()方法返回true,则当前扫描的类被放入spring容器中,返回false则不放入容器中。我这里规定类名中包含“Employee”的返回true,即将其放入到容器中,否则返回false不放入到容器中:

public class MyFilterType implements TypeFilter { @Override public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException { if (metadataReader.getClassMetadata().getClassName().contains("Department")){ //获取当前类注解的信息 AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata(); for (String s : annotationMetadata.getAnnotationTypes()) { System.out.println("当前正在被扫描的类注解类型" + s); //获取当前正在扫描类的信息 ClassMetadata classMetadata = metadataReader.getClassMetadata(); System.out.println("当前正在被扫描的类的类名" + classMetadata.getClassName()); //获取当前类的资源信息(类存放的路径...) Resource resource = metadataReader.getResource(); System.out.println("当前正在被扫描的类存放的地址" + resource.getURL()); return true; return false;

以上配置打印出来的结果:

当前正在被扫描的类的类名com.annotation.entities.Department
当前正在被扫描的类存放的地址file:/D:/DevInstall/Project/annotation/target/classes/com/annotation/entities/Department.class
当前正在被扫描的类注解类型org.springframework.web.bind.annotation.ControllerAdvice
当前正在被扫描的类的类名com.annotation.handler.DepartmentHandler
当前正在被扫描的类存放的地址file:/D:/DevInstall/Project/annotation/target/classes/com/annotation/handler/DepartmentHandler.class
当前正在被扫描的类注解类型org.springframework.stereotype.Service
当前正在被扫描的类的类名com.annotation.service.DepartmentService
当前正在被扫描的类存放的地址file:/D:/DevInstall/Project/annotation/target/classes/com/annotation/service/DepartmentService.class
@ComponentScan(value = "com.annotation",useDefaultFilters = false,includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class,ControllerAdvice.class})})上面的Filte...
@ComponentScan过滤不需要的类前言一、excludeFilters属性需要传递@ComponentScan.Filter注解二、示例指定排除类指定排除注解自定义@ComponentScanIgnore实现过滤器自定义过滤器MyTypeFilter表达式总结 因为maven工程互相依赖,但是不需要依赖子项目的某些切面和配置类,这时项目会配置@ComponentScan扫码子工程的包,由于启动的时候已经加载到了容器类里面,于是就用上了@ComponentScan的excludeFilter
Java核心注解的作用及其使用,了解Spring容器装载的过程和机制,自定义注解来实现自动配置项目依赖环境,包括mybatis、Dubbo、log4j、RabbitMQ、redis相关等自动配置。 springboot 核心注解 主要注解有: @SpringBootApplication @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan( excludeFilters = {@Filter( type = FilterType.CUSTOM, classes = {TypeExcludeF
@ComponentScan还有一些属性: //扫描的时候只扫描哪些指定的组件 ComponentScan.Filter[] includeFilters() default {}; //扫描的时候按照哪些规则排除指定的组件 ComponentScan.Filter[] excludeFilters() default {}; 2.1,excludeFilters MainConfig主配置类
使用@ComponentScan可以让Spring取扫描Bean并注册到Spring容器,如果我们想对这扫描添加一定的限制可以使用过滤器。 package service; import org.springframework.stereotype.Service; import pojo.User; @Service public class UserService { public void printUser(User user){ System.out.println(
//配置类==配置文件(xml) @Configuration //告诉Spring这个一个配制类 @ComponentScan(value="com.ceshi",includeFilters={ @Filter(type=FilterType.CUSTOM,classes={ MyFilterType.class //value:指定要扫描的包。 //excludeFilters=Filter[] 扫描排除 //includeFilters=Filter[] 只扫描..
先说下就个注解的作用: @ComponentScan: 指定包路径扫描,把@Controller、@Service、@Repository,@Component标注的类,实例化到spring容器 @Filter: 是@ComponentScan注解的子注解(内部注解),可以指定一些过滤规则 FilterType.ANNOTATION:按照注解注入...
视频详细讲解,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 1、课程简介 Spring框架是一系列应用框架的核心,也可以说是整合其他应用框架的基座。同时还是SpringBoot的基础。在当下的市场开发环境Spring占据的地位是非常高的,基本已经成为了开发者绕不过去的框架了。它里面包含SpringSpringMVC,SpringData(事务),SrpingTest等等。 其Spring本身里面包含了两大核心IOC和AOP。IOC负责降低我们代码间的依赖关系,使我们的项目灵活度更高,可复用性更强。AOP是让方法间的各个部分更加独立,达到统一调用执行,使后期维护更加的方便。 SpringMVC本身是对Servlet和JSP的API进行了封装,同时在此基础上进一步加强。它推出的一套注解,可以降低开发人员的学习成本,从而更轻松的做表现层开发。同时,在3.x版本之后,它开始之初Rest风格的请求URL,为开发者提供了开发基于Restful访问规则的项目提供了帮助。 SpringData是一组技术合集。里面包含了JDBC,Data JPA,Data Redis,Data Mongodb,Data Rabbit,Data ElasticSearch等等。合集的每一项都是针对不同数据存储做的简化封装,使我们在操作不同数据库时,以最简洁的代码完成需求功能。 SpringTest它是针对Junit单元测试的整合。让我们在开发以及开发后期进行测试时,直接使用Junit结合spring一起测试。 本套课程,我们将全面剖析SpringSpringMVC两个部分。从应用场景分析,到基本用法的入门案例,再到高级特性的分析及使用,最后是执行原理的源码分析。让学生通过学习本套课程不仅可以知其然,还可以知其所以然。最终通过一个综合案例,实现灵活运用Spring框架的各个部分。 2、适应人群 学习spring,要有一定的Java基础,同时应用过spring基于xml的配置。(或者学习过官网的Spring课程) 学习springmvc,要有一定java web开发基础。同时对spring框架要有一定了解。 3、课程亮点 系统的学习Spring框架各个部分,掌握Spring一些高级特性的使用。 l Spring IoC n 设计模式-工厂模式 n 基础应用-入门案例 n 基础应用-常用注解使用场景介绍及入门 n 高级特性-自定义BeanNameGenerator n 高级特性-自定义TypeFilter n 高级特性-ImportSelector和ImportBeanDefinitionRegistrar的分析 n 高级特性-自定义ImportSelector n 高级特性-FilterType的AspectJTypeFilter的使用 n 高级特性-自定义ImportBeanDefinitionRegistrar n 高级特性-自定义PropertySourceFactory实现解析yaml配置文件 n 源码分析-BeanFactory类视图和常用工厂说明 n 源码分析-AnnotationConfigApplicationContext的register方法 n 源码分析-AnnotationConfigApplicationContext的scan方法 n 源码分析-AbstractApplicationContext的refresh方法 n 源码分析-AbstractBeanFactory的doGetBean方法 l Spring Aop n 设计模式-代理模式 n 编程思想-AOP思想 n 基础应用-入门案例 n 基础应用-常用注解 n 高级应用-DeclareParents注解 n 高级应用-EnableLoadTimeWeaving n 源码分析-@EnableAspectJAutoproxy注解加载过程分析 n 源码分析-AnnotationAwareAspectJAutoProxyCreator n 技术详解-切入点表达式详解 l Spring JDBC n 基础应用-JdbcTemplate的使用 n 源码分析-自定义JdbcTemplate n 设计模式-RowMapper的策略模式 n 高级应用-NamedParameterJdbcTemplate的使用 n 源码分析-TransactionTemplate n 源码分析-DataSourceUtils n 源码分析-TransactionSynchronizationManager @ComponentScan.FilterSpring框架@ComponentScan注解的一部分,用于控制@ComponentScan扫描的bean的类型和名称。 @ComponentScan注解用于指示Spring应用程序扫描哪些包以查找组件类(例如,bean,配置类和其他带注释的类)。@ComponentScan.Filter可用于在扫描时排除或包含特定类型或名称的组件。 @ComponentScan.Filter支持四种类型的过滤器:按注释类型过滤,按正则表达式过滤,按指定类型过滤和按指定名称过滤。 以下是一些使用@ComponentScan.Filter的示例: 1. 按注释类型过滤: ```java @Configuration @ComponentScan(basePackages = "com.example", includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, value = MyAnnotation.class)) public class AppConfig { // configuration class code 这个例子Spring将仅扫描带有@MyAnnotation注释的组件。 2. 按正则表达式过滤: ```java @Configuration @ComponentScan(basePackages = "com.example", includeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern = ".*Service")) public class AppConfig { // configuration class code 这个例子Spring将仅扫描名称以“Service”结尾的组件。 3. 按指定类型过滤: ```java @Configuration @ComponentScan(basePackages = "com.example", includeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = MyService.class)) public class AppConfig { // configuration class code 这个例子Spring将仅扫描实现了MyService接口的组件。 4. 按指定名称过滤: ```java @Configuration @ComponentScan(basePackages = "com.example", includeFilters = @ComponentScan.Filter(type = FilterType.CUSTOM, value = MyComponentFilter.class)) public class AppConfig { // configuration class code 这个例子Spring将使用自定义MyComponentFilter类来决定哪些组件应该被包含在扫描。 除了includeFilters之外,@ComponentScan还支持excludeFilters属性,用于指定哪些组件不应该被扫描。