2013-03-09 32 views
6

我在測試和部署中遇到了一系列奇怪的錯誤。它們似乎表明我的一些bean沒有加載到上下文中,儘管它們是在applicationContext.xml中定義的。檢查哪些bean已在春季環境中加載

有沒有什麼方法可以在測試期間檢查哪些bean實際上已被加載?或者查找運行時加載的bean的完整列表?

感謝, b

回答

4

在啓動時,在信息層面春天記錄所有的bean的名字被上下文加載。或者在代碼中,您可以使用getBeanDefinitionNames()來獲取所有的bean名稱。

+0

我懷疑它會很容易,關給這個嘗試和感謝! – 2013-03-09 14:15:28

+1

對於那些需要它的人來說,這非常有用:'@'Autowired ApplicationContext applicationContext; '@'測試 public void testContext(){ String [] beans = applicationContext.getBeanDefinitionNames(); (字符串b:beans){ System.out.println(「***」+ b); } } – 2013-03-09 14:55:16

0

如果有多個上下文說如果你使用spring mvc,你可以使用更強大的東西。

public class SampleContextApplicationListener implements ApplicationListener<ApplicationContextEvent> { 

    private Map<String,ApplicationContext> contextMap = new Hashtable<String,ApplicationContext>(); 

    @Override 
    public void onApplicationEvent(ApplicationContextEvent event) { 
     if(event instanceof ContextStartedEvent || event instanceof ContextRefreshedEvent){ 
      this.getContextMap().put(event.getApplicationContext().getDisplayName(), event.getApplicationContext()); 
     } 

    } 

    public Map<String,ApplicationContext> getContextMap() { 
     return contextMap; 
    } 
} 

然後你可以注入需要的地方聽衆,並提取contextens的地圖,然後interogate它爲所有的bean,使用getBeanDefinitionNames()

@Autowired 
private StatusTestsApplicationListener listener; 
+0

感謝@ams我不知道如何使用它。 – 2013-03-10 14:50:38