当前位置: 首页 > 知识库问答 >
问题:

Spring中FilterType.Annotation的字符串模式

空英逸
2023-03-14
@Configuration
@ComponentScan(basePackages = { "org.fandom.configclass" }, 
excludeFilters = { @ComponentScan.Filter (type = FilterType.ANNOTATION, 
pattern = "org.springframework.stereotype.Controller")})
public class Config {         
   // some stuff
}
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [org.fandom.configclass.Config]; nested exception is java.lang.IllegalArgumentException: Filter type not supported with String pattern: ANNOTATION
    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:179)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:306)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:239)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:254)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:94)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:606)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:462)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5014)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5528)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:717)
Caused by: java.lang.IllegalArgumentException: Filter type not supported with String pattern: ANNOTATION
    at org.springframework.context.annotation.ComponentScanAnnotationParser.typeFiltersFor(ComponentScanAnnotationParser.java:178)
    at org.springframework.context.annotation.ComponentScanAnnotationParser.parse(ComponentScanAnnotationParser.java:107)
    at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:265)
    at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:229)
    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:196)
    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:165)
    ... 19 more
pattern = "org.springframework.stereotype.Controller")

共有1个答案

陶智
2023-03-14

@componentscan,或者更确切地说,处理它的componentscanAnnotationParser不支持FilterType.Annotation模式值。相反,只需提供一个@componentscan.filter#value和一个适当类型的class值即可。

@ComponentScan(
    basePackages = { "org.fandom.configclass" },
    excludeFilters = { 
            @ComponentScan.Filter(type = FilterType.ANNOTATION, value = Controller.class) 
    }
)

在注释中,您声明

我想排除包含控制器的包

package com.example;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Controller;

@Controller
public class Sample {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class);
        System.out.println(ctx.getBeansWithAnnotation(Controller.class));
    }
}

@Configuration
@ComponentScan(basePackages = { "com.example" },
        excludeFilters = { @ComponentScan.Filter(type = FilterType.ANNOTATION, value = Controller.class) })
class Config {
}
{}
 类似资料:
  • 我想知道您是否可以在hasNext(字符串模式)中指定要扫描的内容。例如,我想检索正在扫描的行的前三个字符。那么有没有办法指定诸如 在这里我要抓取该行的前3个字母字符。

  • 问题内容: 我想在输入字符串中搜索给定的字符串模式。 例如 现在,我需要搜索字符串URL是否包含“ ”。请帮我。 这是一个例子。实际上,我需要检查URL是否包含匹配“ / {a-zA-Z0-9} /”的字符串。 问题答案: 您可以为此使用类。如果您只想在中匹配单词字符,则可以使用以下正则表达式。是的简写。如果您可以,请使用或。

  • Kotlin有一个很好的特性,叫做字符串模板。我真的很喜欢。 但是否可以在模板中设置任何格式?例如,我想在kotlin中设置字符串模板中的Double格式,至少要在小数分隔符后设置一些位数:

  • 问题内容: 我有以下模板: 我在执行模板时传递了一个字符串。 但是,出现以下错误: 如何比较模板中的字符串? 问题答案: 是函数,而不是运算符。它以以下形式调用:(不是)。 您可以通过将操作数从的侧面移动到之后来修复模板:

  • 问题内容: 我想知道使用模板字符串而不是新的高级字符串格式是否有优势? 问题答案: 模板要比通常的字符串格式更简单,但会降低表达力。PEP 292 的基本原理将模板与Python的-style字符串格式进行了比较: Python当前支持基于C的‘%’格式字符的字符串替换语法。尽管格式非常丰富,但即使对于有经验的Python程序员,%格式的代码也容易出错。一个常见的错误是忽略了尾随的格式字符,例如i

  • 考虑以下字符串: 和 我希望分离出一个特定的序列,该序列可以存在(第一个示例)也可以不存在(第二个示例) 特别是,我正在寻找一个数字序列,它可以是长1到4个数字,后面可以是一个字母,但在字符串中也不能有子字符串“km”。因此,在我前面的示例中,“278a”是有效的,但数字序列的其余部分不是。 到目前为止,我所做的是: 因为我知道任何包含“km”的字符串都是无效的,所以我应用了这段代码: 我知道这个