返回顶部
首页 > 资讯 > 后端开发 > Python >Springboot项目实现将类从@ComponentScan中排除
  • 275
分享到

Springboot项目实现将类从@ComponentScan中排除

2024-04-02 19:04:59 275人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录将类从@ComponentScan中排除问题描述方案一方案二方案三方案四@ComponentScan 详解将类从@ComponentScan中排除 问题描述 最近在学习Sprin

将类从@ComponentScan中排除

问题描述

最近在学习SpringCloud的Ribbon,在使用


@RibbonClient(name = "springCLOUD-P-DEPT", 
   configuration = RibbonConfig.class)

为服务指定负载均衡策略的时候,根据Ribbon官方文档介绍,自定义的Ribbon配置类不允许被SpringBoot的**@ComponentScan**注解扫描到,所以需要将自定义的配置类RibbonConfig从在Springboot自动注入的范围内排除

方案一

我们都知道,Springboot的**@SpringBootApplication**会自动扫描本类所在包下的所有类和子类,所以只需要将RibbonConfig定义在Springboot启动类所在包外面即可

方案二

通过在启动类中添加


@ComponentScan(excludeFilters = @ComponentScan.Filter(
  type = FilterType.ASSIGNABLE_TYPE, 
  classes = RibbonConfig.class))

通过FilterType.ASSIGNABLE_TYPE来指定要排除的类

如果需要排除的类太多了这个就很麻烦

方案三

通过自定义注解实现


@ComponentScan(excludeFilters = @ComponentScan.Filter(
  type = FilterType.ANNOTATION, 
  classes = ScanIgnore.class))

与方案二不同的是,这里用的是FilterType.ANNOTATION

方案四

通过实现TypeFilter类来自定义过滤器


@ComponentScan(excludeFilters = { 
 @Filter(
  type = FilterType.CUSTOM, 
  classes = TypeExcludeFilter.class),
 @Filter(
  type = FilterType.CUSTOM, 
  classes = AutoConfigurationExcludeFilter.class) })

此处给出的就是**@SpringbootApplication中的实现方式,通过FilterType.CUSTOM**来根据自动一过滤器来排除bean

最后贴出枚举类FilterType:



package org.springframework.context.annotation;

public enum FilterType {
 
 ANNOTATION,
 
 ASSIGNABLE_TYPE,
 
 ASPECTJ,
 
 REGEX,
 
 CUSTOM
}

@ComponentScan 详解

@ComponentScan 的作用就是根据定义的扫描路径,把符合扫描规则的类装配到spring容器中,注解定义如下。


 
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Repeatable(ComponentScans.class)
public @interface ComponentScan {
    @AliasFor("basePackages")
    String[] value() default {};
    @AliasFor("value")
    String[] basePackages() default {};
    Class<?>[] basePackageClasses() default {};
    Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;
    Class<? extends ScopeMetadataResolver> scopeResolver() default AnnotationScopeMetadataResolver.class;
    ScopedProxyMode scopedProxy() default ScopedProxyMode.DEFAULT;
    String resourcePattern() default "**
public class MyTypeFilter implements TypeFilter {
    @Override
    public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
        String className = metadataReader.getClaSSMetadata().getClassName();
        if(className.contains("Controller")){
            return true;
        }
        return false;
    }
}

修改配置类


@Configuration
@ComponentScan(value = "com.xhx.spring",
        useDefaultFilters = false,
        includeFilters = {
            @ComponentScan.Filter(type = FilterType.CUSTOM,classes = {MyTypeFilter.class})
        }
)
public class MyConfig {
}

输出结果:

输出spring容器中的bean的测试类:只过滤输出了名字中含有hello的类。


package com.xhx.spring.componentscan; 
import com.xhx.spring.componentscan.config.MyConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.test.context.junit4.SpringRunner; 
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
 
@RunWith(SpringRunner.class)
@SpringBootTest
public class ComponentScanApplicationTests { 
    @Test
    public void testLoads() {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
        List<String> hello = Arrays.stream(context.getBeanDefinitionNames()).collect(Collectors.toList());
        hello.stream().filter(name->name.contains("hello")).peek(System.out::println).count();
    } 
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Springboot项目实现将类从@ComponentScan中排除

本文链接: https://lsjlt.com/news/156508.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Springboot项目实现将类从@ComponentScan中排除
    目录将类从@ComponentScan中排除问题描述方案一方案二方案三方案四@ComponentScan 详解将类从@ComponentScan中排除 问题描述 最近在学习Sprin...
    99+
    2024-04-02
  • SpringBoot中如何实现一个项目测试类
    本篇内容介绍了“SpringBoot中如何实现一个项目测试类”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.package so...
    99+
    2023-06-08
  • SpringBoot项目从18.18M瘦身到0.18M的实现
    目录一、前言二、瘦身前的Jar包三、解决方法一、前言 SpringBoot部署起来虽然简单,如果服务器部署在公司内网,速度还行,但是如果部署在公网(阿里云等云服务器上),部署起来实在...
    99+
    2023-01-08
    SpringBoot项目瘦身 SpringBoot 瘦身
  • SpringBoot项目怎么将Bean注入到普通类中
    这篇文章主要讲解了“SpringBoot项目怎么将Bean注入到普通类中”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot项目怎么将Bean注入到普通类中”吧!如何将Bean...
    99+
    2023-06-25
  • SpringBoot项目如何将Bean注入到普通类中
    目录如何将Bean注入到普通类中Spring管理的类获得一个注入的Bean方式非Spring管理的类获得一个注入的Bean方式普通类中通过ApplicationContext上下文获...
    99+
    2024-04-02
  • 使用eclipse 实现将springboot项目打成jar包
    前言: 对于经验老道的人员可以路过,但是对于经验比较少的开发者来说,不得不是一篇好的博文,可以让大家少走一些弯路和无用的思考。 下面进入正题!!! 一、首先修改eclipse运行环境...
    99+
    2024-04-02
  • 如何使用eclipse实现将springboot项目打成jar包
    这篇文章主要为大家展示了“如何使用eclipse实现将springboot项目打成jar包”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用eclipse实现将springboot项目打成j...
    99+
    2023-06-20
  • 怎么在Android项目中实现一个Tab分类排序控件
    怎么在Android项目中实现一个Tab分类排序控件?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。XML布局引入<com.net168.lib.SortTabLayout...
    99+
    2023-05-31
    android tab roi
  • SpringBoot项目中怎么实现接口限流
    这篇文章将为大家详细讲解有关SpringBoot项目中怎么实现接口限流,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。限流算法一般有漏桶算法和令牌桶算法及计数...
    99+
    2024-04-02
  • SpringBoot项目中怎么实现接口防刷
    SpringBoot项目中怎么实现接口防刷,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、自定义注解import java.lang.annotation.Rete...
    99+
    2023-06-20
  • idea快速实现将SpringBoot项目打包Docker镜像并部署
    目录1.修改docker的配置文件2.配置端口开放3.IDEA安装Docker插件4.IDEA配置docker5.SpringBoot整合Docker配置5.1 安装pom依赖5.2...
    99+
    2024-04-02
  • springBoot项目中怎么实现启动多个实例
    今天就跟大家聊聊有关springBoot项目中怎么实现启动多个实例,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1) 这是不同环境的yml文件,注意 文件名 必须为applicati...
    99+
    2023-06-20
  • SpringBoot项目中怎么实现MySQL读写分离
    这篇文章主要介绍了SpringBoot项目中怎么实现MySQL读写分离的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot项目中怎么实现MySQL读写分离文章都会有所收获,下面我们一起来看看吧。1...
    99+
    2023-07-02
  • SpringBoot项目中如何实现MySQL读写分离
    这篇“SpringBoot项目中如何实现MySQL读写分离”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringBoot...
    99+
    2023-07-06
  • 在java项目中实现归并排序的方法
    在java项目中实现归并排序的方法?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。归并排序算法:假设初始序列含有n个记录,首先将这n个记录看成n个有序的子序列,每个子序列长度为1...
    99+
    2023-05-31
    java 归并排序 ava
  • idea怎么快速实现将SpringBoot项目打包Docker镜像并部署
    这篇文章主要介绍了idea怎么快速实现将SpringBoot项目打包Docker镜像并部署的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇idea怎么快速实现将SpringBoot项目打包Docker镜像并部署文...
    99+
    2023-06-30
  • 在java项目中实现一个树形选择排序
    在java项目中实现一个树形选择排序?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。树形选择排序:又称锦标赛排序(Tournament Sort),是一种按照锦标赛的思想进行选择...
    99+
    2023-05-31
    java 树形选择排序 ava
  • springboot项目中实现访问druid内置监控页面
    springboot 访问druid内置监控页面 1、首先加入druid依赖 <dependency> <groupId>com.alibaba&...
    99+
    2024-04-02
  • SpringBoot项目中如何实现MySQL读写分离详解
    目录1、MySQL主从复制1.1、介绍二进制日志:MySQL复制过程分成三步:1.2、主从库搭建1.2.1、主库配置1.2.2、从库配置1.3、坑位介绍1.3.1、UUID报错1.3...
    99+
    2024-04-02
  • Springboot项目中如何实现异常处理自定义
    这期内容当中小编将会给大家带来有关Springboot项目中如何实现异常处理自定义,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。背景Springboot 默认把异常的处理集中到一个ModelAndView...
    99+
    2023-05-31
    springboot 异常处理 目中
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作