2015-08-03 93 views
5

我想創建一個對象工廠,它將首先檢查一個bean是否已經在spring上下文中專門定義。如果沒有找到這樣的bean,它將檢查其他方式來創建實例。有沒有辦法來檢查bean是否在spring上下文中定義?

我曾嘗試使用下面的代碼

try { 
     component = (PageComponent) appContext.getBean(w.getName()); 
    } catch (org.springframework.beans.factory.NoSuchBeanDefinitionException e) { 
      component = loadFromDB(w, page); 
    } 

這是工作,但每當黃豆是不是在Spring上下文可創建一個異常對象實現了它。

有沒有辦法避免這種情況?或換句話說有沒有辦法來檢查一個bean是否在spring上下文中定義?

回答

8

試試這個:

if(appContext.containsBeanDefinition(w.getName())) 
    ; // Get the bean 
+1

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/beans/factory/support/AbstractBeanFactory.html#containsBeanDefinition- java.lang.String- –

+0

有沒有一種方法來驗證XML中的相同? – Sridhar

0

beanFactory.containsBean(w.getName())將返回boolean值取決於是否有已經被這個名字註冊的bean。看看here

做這樣的事情

if (!((BeanFactory) applicationContext).containsBean(w.getName())) { 
    component = loadFromDB(w, page); 
} 
相關問題