@ComponentScan(value = "com.xxx",excludeFilters = {
@ComponentScan.Filter(type = FilterType.REGEX,pattern = {
//以下写正则表达式,需要对目标类的完全限定名完全匹配,否则不生效
"com.xxx.xxx.impl.service.+",
@SpringBootApplication
public class StartApplication {
public static ApplicationContext applicationContext = null;
public static void main(String[] args) {
applicationContext = SpringApplication.run(StartApplication.class, args);
- 优点:可以通过正则去匹配目标类型的完全限定名,一个表达式可以过滤很多对象;
不同场景下按需配置即可,我遇到的问题是有那么几十个类有冲突,不想注入这些类,这时我使用正则过滤特定类的方法解决了我的问题。
在 SpringBoot项目中有时候某些类不需要被 @ComponentScan注解给扫描到, 比如在给某个服务的Ribbon自定义配置类时,为得防止 @Configuration注解的类所在的包与 @ComponentScan扫描的包重叠.
使用 @ComponeentScan 的 excludeFilters 属性进行设定我们需要排除的类.
@ComponentScan(excludeFilters
在抽取公共swagger配置类时,将swagger放入com.test.common.config包内,其他模块通过@ComponentScan进行进行引用,但有的模块在引用时,会扫描到common.config包路径下的其他配置类而引发错误,如引用到RedisConfig类而报错,此时需要将该类排除掉。
通过@ComponentScan中的excludeFilters属性进行排除类。
@SpringBootApplication
@ComponentScan(basePackage
指定包扫描的根路径,让 Spring 来扫描指定包及子包下的组件。不过在上面的声明中有显式的指定了两个过滤条件:
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, c...
@ComponentScan过滤不需要的类前言一、excludeFilters属性需要传递@ComponentScan.Filter注解二、示例指定排除类指定排除注解自定义@ComponentScanIgnore实现过滤器自定义过滤器MyTypeFilter表达式总结
因为maven工程互相依赖,但是不需要依赖子项目的某些切面和配置类,这时项目会配置@ComponentScan扫码子工程的包,由于启动的时候已经加载到了容器类里面,于是就用上了@ComponentScan的excludeFilter
文章目录前因方式一方式二方式三方式四方式五方式六总结
我们都知道component-scan在springmvc或者springboot中可以扫描包路径,但是我们如何使用里面的属性排除不需要扫描的类?
使用spring的xml配置方式实现,这个是基本功,知道这种方式,那么注解方式就容易理解了
<!-- 定义项目扫描包的路径,并且排除ApplicationContextConfig和WebSpringMVCServletConfig-->
<context:component-
使用@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(
SpringBoot忽略某些自动配置类
最近业务要求对接数据,需要连接第三方的数据库。但是他们的都是内网,只能通过前置机上部署我们的项目,由于
我们与第三方对接的处理都写在单独的服务里,如果来一个第三方,单独再写一个服务会很麻烦,不好管理,所以需要把
所有处理都写在已有的服务里,可是有个问题就是:这次需要把该服务放到指定的前置机上,本来是使用多数据源连接第
三方数据库,并且连接的有自己的 mysql、Redis,还会注册到 Eureka 上,直接放到前置机上,会报 Redis 和 找不
1、@ComponentScan注解作用
@ComponentScan用于扫描指定包下的类,将标注有@Controller、@Service、@Repository、@Component4个注解其中一个的类扫描到Spring容器,作为Spring
2、@ComponentScan使用实例
(1)项目结构
(2)标注有标注有@Controller、@Service、@Repository、@Component4
@ComponentScan中还有一些属性:
//扫描的时候只扫描哪些指定的组件
ComponentScan.Filter[] includeFilters() default {};
//扫描的时候按照哪些规则排除指定的组件
ComponentScan.Filter[] excludeFilters() default {};
2.1,excludeFilters
MainConfig主配置类
您可以使用`@ComponentScan`注解的`excludeFilters`属性来排除某个包下的类加载。具体步骤如下:
1. 创建一个自定义的过滤器类,实现`org.springframework.core.type.filter.TypeFilter`接口,用于排除指定包下的类加载。
```java
public class ExcludeFilter implements TypeFilter {
private final String[] excludedPackage;
public ExcludeFilter(String[] excludedPackage) {
this.excludedPackage = excludedPackage;
@Override
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
for (String excluded : excludedPackage) {
if (metadataReader.getClassMetadata().getClassName().startsWith(excluded)) {
return true;
return false;
2. 在`@ComponentScan`注解中添加`excludeFilters`属性,指定要排除的包路径及自定义的过滤器类。
```java
@Configuration
@ComponentScan(basePackages = "com.example",
excludeFilters = @ComponentScan.Filter(type = FilterType.CUSTOM, classes = ExcludeFilter.class))
public class AppConfig {
// ...
在上述示例中,我们排除了`com.example`包及其子包下的所有类加载。您可以按需修改`ExcludeFilter`类中的逻辑,来满足您的实际需求。