2016-08-30 77 views
1

我有@ComponentScan的彈簧上下文。導入彈簧配置並排除過濾器

我想添加一個我的配置的變體,通過包名或正則表達式排除某些bean。我知道使用@Import來導入其他配置。

但是,我可以通過執行排除過濾器來導入配置並覆蓋其組件scannign嗎?這會工作嗎?

@Configuration 
@ComponentScan(value = { "my.app.pack1", "my.app.pack2" }) 
public class ClientApplicationConfig {} 



@Configuration 
@ComponentScan(value = { "my.app.pack1" }, 
    excludeFilters = @ComponentScan.Filter(type = FilterType.ASPECTJ, pattern = "my.app.pack1.ignore.*")) 
    public class DifferentClientAppConfig {} 
+0

你試過了嗎?我不會期望它,因爲這兩個組件掃描將導致檢測到的組件,它們不合並。 –

回答

0

是的,你可以做到這一點。例如,請嘗試以下操作:

@Configuration 
@ComponentScan(value={"my.app.pack1"},[email protected](type=FilterType.CUSTOM,value=MainConfig.WebExclude.class)) 
public class MainConfig 
{ 
    public static class WebExclude extends RegexPatternTypeFilter{ 

    public WebExclude(Pattern aPattern) 
    { 
     super(Pattern.compile("my.app.pack1\\.ignore")); 
    } 
... 

你可以給它任何你想要的正則表達式。這將組件掃描my.app.pack1,不包括my.app.pack1.ignore。*