Java Spring不能使用@ComponentScan中带有星号的REGEX类型的过滤器包含/排除bean

Java Spring不能使用@ComponentScan中带有星号的REGEX类型的过滤器包含/排除bean,java,spring,component-scan,Java,Spring,Component Scan,我试图使用@ComponentScan注释的IncludeFilters属性来管理spring应用程序加载的bean。我使用的过滤器类型为FilterType.REGEX。我想匹配任何东西作为我的模式使用的最后一部分,但我似乎根本没有这样做。 我有一个bean定义: package org.example.child; 公共类ChildDao{} ... 公共类儿童服务{} ... 公共类ChildComponent{} 和配置类定义: @ComponentScan( value=“com.e

我试图使用
@ComponentScan
注释的IncludeFilters属性来管理spring应用程序加载的bean。我使用的过滤器类型为
FilterType.REGEX
。我想匹配任何东西作为我的模式使用的最后一部分,但我似乎根本没有这样做。 我有一个bean定义:

package org.example.child;
公共类ChildDao{}
...
公共类儿童服务{}
...
公共类ChildComponent{}
和配置类定义:

@ComponentScan(
value=“com.example”,
includeFilters={@ComponentScan.Filter(类型=FilterType.REGEX,
pattern=“com.example.*.Child*”})
有了这样的配置,Spring根本找不到任何bean

当星号不是用来匹配模式的最后一部分,而是在两者之间的某个地方使用时,它似乎可以正常工作

例如,以下配置匹配所有没有问题的服务:

@ComponentScan(
value=“com.example”,
includeFilters={@ComponentScan.Filter(类型=FilterType.REGEX,
pattern=“com.example.*.Service”)})

这是框架的一种设计行为,还是可以使用这种“类似蚂蚁”的正则表达式模式匹配模式的最后一部分?类型为
FilterType的过滤器。正则表达式是使用标准java
模式和
匹配器匹配的,因此没有类似
“com.example.*.Child*”
将匹配。之所以使用
“com.example.*.Service”
是因为
*
匹配任何字符序列。要使用regex包含/排除,请使用有效的regex

编辑:


因此,在本例中,一个可能的选择是使用类似
com.example.child.child.
的模式来匹配
com.example.child
包中的任何类,这些类的名称以child开头。

FilterType.REGEX
类型的过滤器使用标准java
模式和
匹配器进行匹配,因此类似ant的模式,如
“com.example.*.Child*”
会匹配。之所以
“com.example.*.Service”
是因为
*
匹配任何字符序列。为了使用regex包含/排除,请使用有效的regex

编辑:


因此,在这种情况下,一个可能的选择是使用类似
com.example.child.child.
的模式来匹配
com.example.child
包中的任何类,这些类的名称以child开头。

那么您想匹配这个
org.example.child
包中所有以
child
开头的类,我说得对吗?d是什么o您的意思是
Spring根本找不到任何bean。
?是的,我想看看org.example.child包中所有名称以child开头的类。使用模式
child*
Spring找不到任何提到的bean ChildDao、ChildService或ChildComponent。我想我误解了includefilter的工作方式。我希望t匹配类似ant的模式,如
Child*
,但它使用标准java模式和匹配器机制。第二个示例之所以有效,唯一的原因是它包括
*服务
模式,它与名称的前面部分相匹配。我认为类似
Child.
的模式在这种情况下可以工作。您的代码适用于我和我不确定它为什么不起作用,请尝试使用方括号
[Child]*
不幸的是,方括号对我不起作用。我不确定它是否应该起作用,因为在正则表达式中使用方括号来匹配其中提到的任何字符,所以我认为
[Child]*
将只匹配由这些字符组成的模式。因此,您希望匹配此
org.example.Child
包中以
Child
开头的所有类。Child
包我说得对吗?什么意思
Spring根本找不到任何bean。
?是的,我想查看org.example.Child包中以w开头的所有类使用模式
Child*
spring找不到任何提到的Bean ChildDao、ChildService或ChildComponent。我想我误解了IncludeFilter的工作原理。我希望它匹配类似ant的模式,如
Child*
,但它使用标准java模式和匹配器机制。这是第二次考试的唯一原因ple之所以有效是因为它包含了与名称前面部分匹配的
*服务
模式。我认为类似
Child.
的模式在这种情况下可以工作。您的代码对我有效,我不确定为什么它不起作用,请尝试使用方括号
[Child]*
不幸的是,括号对我不起作用。我不确定它是否应该起作用,因为regex中使用方括号来匹配其中提到的任何字符,所以我认为
[Child]*
将只匹配由这些字符组成的模式。这不正确回答您的代码对我有效并尝试我的评论这不正确回答您的代码对我有效并尝试我的评论