2011-04-07 33 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); 
} 
相關問題