package org.springframework.context.annotation;
public enum FilterType {
ANNOTATION,
ASSIGNABLE_TYPE,
ASPECTJ,
REGEX,
CUSTOM;
private FilterType() {
ANNOTATION
:注解类型ASSIGNABLE_TYPE
:指定类型ASPECTJ
:按照Aspectj表达式REGEX
:按照正则表达式CUSTOM
:自定义规则
问题 在抽取公共swagger配置类时,将swagger放入com.test.common.config包内,其他模块通过@ComponentScan进行进行引用,但有的模块在引用时,会扫描到common.config包路径下的其他配置类而引发错误,如引用到RedisConfig类而报错,此时需要将该类排除掉。解决方案 通过@ComponentScan中的excludeFilters属性进行排除类。@SpringBootApplication@ComponentScan(basePackage
@ComponentScan注解的排除属性
@ComponentScan组件源码,直截取了用到的属性:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Repeatable(ComponentScans.class)
public @interface ComponentScan {
// 是否使用默认过滤规则:默认为true,被@Component、@Repository、@Service、@Co
文章目录前因方式一方式二方式三方式四方式五方式六总结
我们都知道component-scan在springmvc或者springboot中可以扫描包路径,但是我们如何使用里面的属性排除不需要扫描的类?
使用spring的xml配置方式实现,这个是基本功,知道这种方式,那么注解方式就容易理解了
<!-- 定义项目扫描包的路径,并且排除ApplicationContextConfig和WebSpringMVCServletConfig-->
<context:component-
在 SpringBoot项目中有时候某些类不需要被 @ComponentScan注解给扫描到, 比如在给某个服务的Ribbon自定义配置类时,为得防止 @Configuration注解的类所在的包与 @ComponentScan扫描的包重叠.
使用 @ComponeentScan 的 excludeFilters 属性进行设定我们需要排除的类.
@ComponentScan(excludeFilters
指定包扫描的根路径,让 Spring 来扫描指定包及子包下的组件。不过在上面的声明中有显式的指定了两个过滤条件:
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, c...
@ComponentScan用于类或接口上,主要是指定扫描路径并把带有指定注解的类注册到Spring容器中。
会被自动装配的注解包括@Component、@Bean、@Controller、@Service、@Repository等等。
二、定义组件
1. @Service注解的类
MyService类被扫描后,会生成名为myBeanService的实例
package info.pigg.study.java.service;
import org.sprin
在项目初始化时,会将加@component,@service...相关注解的类添加到spring容器中。
但是项目需要,项目初始化时自动过滤某包下面的类,不将其添加到容器中。
有两种实现方案,
1.如果要过滤的类比较少,直接在启动类@SpringbootApplication(scanPackage="xxx.xxx.xxx")该注解上添加exclude属性,过滤某个class类
也可...
@ComponentScan(excludeFilters =
@ComponentScan.Filter(type = FilterType.REGEX,pattern = "com.action.other.*")
public class Application {
public static void ma...
最近接手一套基于SpringBoot项目,对项目进行重构调整,将公共部分抽离成子项目。在实践的过程中,发现抽离之后的模板中组件并没有被初始化。于是将排查解决过程中搜集到的方案及知识汇总分享给大家。
问题的原因很简单,因多套系统的package命名不一致。比如业务系统的包命名为com.abc.xx,而公共(common)部分的包命名为com.efg.xx,引入公共jar包时默认是无法初始化的。
对于SpringBoot项目,我们知道扫描的路径从启动类所在包开始,扫描当前包及其子级包下的所有文件。上
最近在学习SpringCloud的Ribbon,在使用
@RibbonClient(name = "SPRINGCLOUD-P-DEPT",
configuration = RibbonConfig.class)
为服务指定负载均衡策略的时候,自定义的Ribbon配置类不能被Springboot的**@ComponentScan**注解扫描到,所以需要将自定义的配置类Ribbo...