我目前使用AnnotationConfigApplicationContext
和ClasspathXmlApplicationContext
混合使用,并将AnnotationConfigApplicationContext
作为父上下文。但是我发现AnnotationConfigApplicationContext
中定义的bean不能很好地处理ClasspathXmlApplicationContext
中定义的bean。所以我还是要删除ClasspathXmlApplicationContext
,并仅使我的应用程序使用AnnotationConfigApplicationContext
。
问题是,我不知道如何完全替换<context:component-scan>
。我可以使用AnnotationConfigApplicationContext.scan(...)
轻松执行包扫描,但似乎无法在AnnotationConfigApplicationContext
中添加包含/排除模式。
有什么想法吗?
答案 0 :(得分:5)
类AnnotationConfigApplicationContext似乎不提供开箱即用的排除/包含过滤器。在内部,类使用ClassPathBeanDefinitionScanner的实例来扫描提供方法addExcludeFilter
和addIncludeFilter
的注释。不幸的是,该字段为private
并且没有getter方法,因此您不能只编写扩展AnnotationConfigApplicationContext
的实现并添加include和exclude方法。相反,您可能必须从AnnotationConfigApplicationContext
复制代码并添加缺少的方法:
public void addExcludeFilter(TypeFilter excludeFilter)
{
this.scanner.addExcludeFilter(excludeFilter);
}
public void addIncludeFilter(TypeFilter includeFilter)
{
this.scanner.addIncludeFilter(includeFilter);
}