我在測試和部署中遇到了一系列奇怪的錯誤。它們似乎表明我的一些bean沒有加載到上下文中,儘管它們是在applicationContext.xml中定義的。檢查哪些bean已在春季環境中加載
有沒有什麼方法可以在測試期間檢查哪些bean實際上已被加載?或者查找運行時加載的bean的完整列表?
感謝, b
我在測試和部署中遇到了一系列奇怪的錯誤。它們似乎表明我的一些bean沒有加載到上下文中,儘管它們是在applicationContext.xml中定義的。檢查哪些bean已在春季環境中加載
有沒有什麼方法可以在測試期間檢查哪些bean實際上已被加載?或者查找運行時加載的bean的完整列表?
感謝, b
在啓動時,在信息層面春天記錄所有的bean的名字被上下文加載。或者在代碼中,您可以使用getBeanDefinitionNames()
來獲取所有的bean名稱。
如果有多個上下文說如果你使用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;
感謝@ams我不知道如何使用它。 – 2013-03-10 14:50:38
我懷疑它會很容易,關給這個嘗試和感謝! – 2013-03-09 14:15:28
對於那些需要它的人來說,這非常有用:'@'Autowired ApplicationContext applicationContext; '@'測試 public void testContext(){ String [] beans = applicationContext.getBeanDefinitionNames(); (字符串b:beans){ System.out.println(「***」+ b); } } – 2013-03-09 14:55:16