2011-04-07 52 views
6

我混合使用AnnotationConfigApplicationContextClasspathXmlApplicationContext当前,并使AnnotationConfigApplicationContext作为父上下文。但是我发现在AnnotationConfigApplicationContext中定义的bean不能很好地应对ClasspathXmlApplicationContext中定义的bean。无论如何,我想要删除ClasspathXmlApplicationContext,并且仅使用我的应用程序AnnotationConfigApplicationContext做上下文:组件扫描程序化的方式?

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

任何想法?

+0

也看看http://stackoverflow.com/questions/259140/scanning-java-annotations-at-runtime – 2011-10-01 01:54:27

回答

5

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

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

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