@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占据的地位是非常高的,基本已经成为了开发者绕不过去的框架了。它里面包含了Spring,SpringMVC,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一起测试。
本套课程中,我们将全面剖析Spring和SpringMVC两个部分。从应用场景分析,到基本用法的入门案例,再到高级特性的分析及使用,最后是执行原理的源码分析。让学生通过学习本套课程不仅可以知其然,还可以知其所以然。最终通过一个综合案例,实现灵活运用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.Filter是Spring框架中@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属性,用于指定哪些组件不应该被扫描。