Делать контекст: компонентное сканирование программным способом? - PullRequest
6 голосов
/ 07 апреля 2011

Я использую AnnotationConfigApplicationContext и ClasspathXmlApplicationContext в настоящее время, и создаю AnnotationConfigApplicationContext в качестве родительского контекста.Но я обнаружил, что бины, определенные в AnnotationConfigApplicationContext, плохо справляются с бинами, определенными в ClasspathXmlApplicationContext.Поэтому я все равно хотел бы отбросить ClasspathXmlApplicationContext и заставить мое приложение использовать только AnnotationConfigApplicationContext.

Проблема в том, что я не знаю, как полностью заменить <context:component-scan>.Я легко могу выполнить сканирование пакета, используя AnnotationConfigApplicationContext.scan(...), но, похоже, нет способа добавить шаблон include / exclude в AnnotationConfigApplicationContext.

Есть идеи?

1 Ответ

5 голосов
/ 12 апреля 2011

Это не похоже на класс AnnotationConfigApplicationContext предоставляет готовые фильтры исключения / включения. Внутренне класс использует экземпляр ClassPathBeanDefinitionScanner для сканирования аннотаций, который предоставляет методы addExcludeFilter и addIncludeFilter. К сожалению, поле имеет значение private и не имеет метода получения, поэтому вы не можете просто написать реализацию, расширяющую AnnotationConfigApplicationContext, и добавить методы include и exclude. Вместо этого вам, вероятно, придется скопировать код из AnnotationConfigApplicationContext и добавить недостающие методы:

public void addExcludeFilter(TypeFilter excludeFilter) 
{
    this.scanner.addExcludeFilter(excludeFilter);
}

public void addIncludeFilter(TypeFilter includeFilter) 
{
    this.scanner.addIncludeFilter(includeFilter);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...