1

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

package org.example.child;

public class ChildDao {}
...
public class ChildService{}
...
public class ChildComponent{}

和配置类定义:

@ComponentScan(
        value = "com.example", 
        includeFilters = {@ComponentScan.Filter(type = FilterType.REGEX, 
                pattern = "com.example.*.Child*")})

有了这样的配置,Spring 根本找不到任何 bean。

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

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

@ComponentScan(
        value = "com.example", 
        includeFilters = {@ComponentScan.Filter(type = FilterType.REGEX, 
                pattern = "com.example.*.*Service")})

这是框架的设计行为还是应该可以使用这种“类似蚂蚁”的正则表达式模式来匹配模式的最后一部分?

4

1 回答 1

0

类型的过滤器FilterType.REGEX使用标准的 javaPattern和匹配Matcher,因此没有类似 ant 的模式"com.example.*.Child*"可以匹配。唯一的原因"com.example.*.*Service"是因为.*which 匹配任何字符序列。为了使用正则表达式包含/排除,请使用有效的正则表达式。

编辑:

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

于 2019-09-22T17:51:51.683 回答