如何在Spring中使用正则表达式集合过滤bean集合?

时间:2015-02-17 08:30:16

标签: java spring dependency-injection autowired

我想在注释模式下使用Spring自动装配一组bean。我尝试过类似下面的内容......

@Configuration
@ComponentScan(basePackages = "mypkg", 
    includeFilters = @Filter(type = FilterType.REGEX, pattern = {"regex1", "regex2"}), 
    excludeFilters = @Filter(type = FilterType.REGEX, pattern = "regex3"))
public class BeanCollector {

    @Autowired
    private List<MyBean> myBeans;

    @Bean(name = "beans")
    public List<MyBean> getMyBeans() {
        return myBeans;
    }
}

此代码运行良好,但问题是在我的应用程序的现实世界中。 regexes是在运行时生成的,所以我不能将它们硬编码为上面的代码。我使用了一个带有静态方法的类,返回一个像这样的String数组......

includeFilters = @Filter(type = FilterType.REGEX, pattern = Regexes.getIncludeRegexes())

但它带来了编译错误。我认为它应该有一个解决方案,但尽管有一个很深的谷歌搜索我无法找到任何。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您需要动态选择一组与MyBean类/接口匹配的可用bean。最好的方法是在上面注入Collection<MyBean>,然后迭代集合,根据您的标准进行选择。 Groovy闭包,Google Guava或Java 8 lambdas可以使编写过程更简单。