2010-01-08 46 views

回答

28

如果您需要對BeanFactory的引用,請使用BeanFactoryAware。如果您需要參考ApplicationContext,請使用ApplicationContextAware

請注意,ApplicationContext接口是BeanFactory的子類,並在基本接口上提供了其他方法。

如果您只需致電getBean(),那麼BeanFactory就足夠了。

還要注意,Spring 2.5+提供了一種更好的方式讓自己與BeanFactoryApplicationContext(例如,

private @Autowired ApplicationContext appContext; 
private @Autowired BeanFactory beanFactory; 

不需要XyzAware接口。

+0

在autowired情況下可以捕獲appContext/beanFactory設置事件嗎?在構造函數中,appContext/beanFactory尚未設置... – ksimon 2012-03-12 15:43:47

2

您是否需要訪問ApplicationContext上提供的附加功能?如果是這樣,那麼你當然應該使用ApplicationContextAware。如果沒有,BeanFactoryAware就足夠了。

除了許多其他的事情之外,ApplicationContext還有其他方法來檢查bean,例如 containsBeanDefinitiongetBeanDefinitionCountgetBeanDefinitionNamesgetBeanNamesForTypegetBeansOfType可能對你有用的,哪些是不可用的Bean工廠

我通常實現了ApplicationContextAware

4

ApplicationContext是一個BeanFactory的擴展版本,因此提供了額外的功能。

因此是否使用ApplicationContextAwareBeanFactoryAware歸結爲以下問題:您是否明確需要任何其他ApplicationContext功能?如果你執行ApplicationContextAware否則堅持BeanFactoryAware