Spring не может включать / исключать компоненты, используя фильтры типа REGEX со звездочкой в ​​@ComponentScan - PullRequest
1 голос
/ 22 сентября 2019

Я пытаюсь управлять bean-компонентами, загружаемыми моим весенним приложением, используя свойство IncludeFilters аннотации @ComponentScan.Я использую фильтр типа 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")})

Это спроектированное поведение фреймворка или должно быть возможно сопоставить последнюю часть шаблона, используя такой шаблон регулярных выражений типа муравья?

1 Ответ

0 голосов
/ 22 сентября 2019

Фильтры типа FilterType.REGEX сопоставляются с использованием стандартных java Pattern и Matcher, поэтому никакие муравьиные шаблоны, такие как "com.example.*.Child*", не будут соответствовать.Единственная причина, по которой "com.example.*.*Service", заключается в том, что .* соответствует любой последовательности символов.Чтобы включить / исключить использование регулярного выражения, используйте допустимое регулярное выражение.

Редактировать:

Так что в этом случае одним из возможных вариантов будет использование шаблона типа com.example.child.Child.* для сопоставления любым классам из com.example.child посылка, начинающаяся с Child в их именах.

...