做上下文:组件扫描编程方式?

时间:2011-04-07 03:05:48

标签: java spring annotations

我目前使用AnnotationConfigApplicationContextClasspathXmlApplicationContext混合使用,并将AnnotationConfigApplicationContext作为父上下文。但是我发现AnnotationConfigApplicationContext中定义的bean不能很好地处理ClasspathXmlApplicationContext中定义的bean。所以我还是要删除ClasspathXmlApplicationContext,并仅使我的应用程序使用AnnotationConfigApplicationContext

问题是,我不知道如何完全替换<context:component-scan>。我可以使用AnnotationConfigApplicationContext.scan(...)轻松执行包扫描,但似乎无法在AnnotationConfigApplicationContext中添加包含/排除模式。

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

AnnotationConfigApplicationContext似乎不提供开箱即用的排除/包含过滤器。在内部,类使用ClassPathBeanDefinitionScanner的实例来扫描提供方法addExcludeFilteraddIncludeFilter的注释。不幸的是,该字段为private并且没有getter方法,因此您不能只编写扩展AnnotationConfigApplicationContext的实现并添加include和exclude方法。相反,您可能必须从AnnotationConfigApplicationContext复制代码并添加缺少的方法:

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

public void addIncludeFilter(TypeFilter includeFilter) 
{
    this.scanner.addIncludeFilter(includeFilter);
}