2017-05-23 37 views
0

我有一個用@Configuration註釋的AppConfig類,它有各種不同的bean定義,其中包含執行第三方命中應用程序的bean。現在在我的Spring集成測試用例中,我不希望這些bean被初始化。那就是我創建了另一個名爲TestAppConfig的bean,它用@Configuration註釋,我嘲笑所有執行第三方命中的bean。現在在我的testContext.xml中,我正在向上下文添加一個排除過濾器:component-scan其中我指定要排除的AppConfig包。但不知何故,這個AppConfig每次都被初始化。我曾嘗試適當的正則表達式,但仍然沒有工作。如果有人知道原因,那麼請分享。如何從testContext.xml中的組件掃描中排除@Configuration類

+1

使用'@ Profile'或'@ Conditional' – pvpkiran

+0

不幸的是因爲我使用的彈簧3.2.16 –

+0

我不能使用@Conditional顯示你的配置,以及如何啓動應用程序。 – StanislavL

回答

2

看到你使用Spring 3.2的評論後,你可以看到here對於舊版本的春天的使用@profile

您可以使用@profile註釋,以確定哪些@Bean將被創建或不。

例子:

定義的bean低於

@Bean 
@Profile("production") 
    public DataSource prodDataSource() { 
     ... 
     return dataSource; 
    } 

@Bean 
@Profile("development") 
    public DataSource devDataSource() { 
     ... 
     return dataSource; 
    } 

有關配置文件名爲 「發展」

  1. 在app.properties spring.profiles.active=development
  2. prodDataSource不會調用編輯。但devDataSource將被稱爲

有關配置文件稱爲 「生產」

  1. 在app.properties spring.profiles.active=production
  2. prodDataSource不會被調用。但devDataSource將被稱爲
+0

使用@profile爲我工作。這是我如何解決我的問題。使用@profile(「test」)註釋我的testAppConfig,並在其各自的測試基礎結構設置中添加@activeProfiles(「test」)。並用@profile(「!test」)註釋了我的AppConfig。這種方式當我的應用程序啓動時,即使我沒有明確地傳遞任何配置文件,它只是檢查當前配置文件沒有測試,因此拿起配置。 –