兩者都可以用來獲取bean實例,但哪一個更適合用來實現?Spring BeanFactoryAware和ApplicationContextAware有什麼區別?
11
A
回答
28
如果您需要對BeanFactory
的引用,請使用BeanFactoryAware
。如果您需要參考ApplicationContext
,請使用ApplicationContextAware
。
請注意,ApplicationContext
接口是BeanFactory
的子類,並在基本接口上提供了其他方法。
如果您只需致電getBean()
,那麼BeanFactory
就足夠了。
還要注意,Spring 2.5+提供了一種更好的方式讓自己與BeanFactory
或ApplicationContext
(例如,
private @Autowired ApplicationContext appContext;
private @Autowired BeanFactory beanFactory;
不需要XyzAware
接口。
2
您是否需要訪問ApplicationContext上提供的附加功能?如果是這樣,那麼你當然應該使用ApplicationContextAware。如果沒有,BeanFactoryAware就足夠了。
除了許多其他的事情之外,ApplicationContext還有其他方法來檢查bean,例如 containsBeanDefinition,getBeanDefinitionCount,getBeanDefinitionNames,getBeanNamesForType,getBeansOfType可能對你有用的,哪些是不可用的Bean工廠
我通常實現了ApplicationContextAware
4
的ApplicationContext
是一個BeanFactory
的擴展版本,因此提供了額外的功能。
因此是否使用ApplicationContextAware
或BeanFactoryAware
歸結爲以下問題:您是否明確需要任何其他ApplicationContext
功能?如果你執行ApplicationContextAware
否則堅持BeanFactoryAware
。
相關問題
- 1. Spring和Spring.net有什麼區別嗎?
- 2. DAO和Spring Beans有什麼區別?
- 3. spring-boot:run和spring-boot有什麼區別:開始
- 4. spring-context和spring-core依賴關係有什麼區別?
- 5. spring 2.5和spring 3.x有什麼區別?
- 6. Spring Data-JPA與JPA:有什麼區別?
- 7. 有什麼區別`和$(Bash中有什麼區別?
- 8. ==和===有什麼區別?
- 9. ==和===有什麼區別?
- 10. 有什麼區別? :和||
- 11. ==和===有什麼區別?
- 12. '=='和'==='有什麼區別?
- 13. `&`和`ref`有什麼區別?
- 14. 有什麼區別:。!和:r!?
- 15. | 0和~~有什麼區別?
- 16. Appender和〜有什麼區別?
- 17. ModelAndView和ModelMap有什麼區別?
- 18. LocalContainerEntityManagerFactoryBean和LocalEntityManagerFactoryBean有什麼區別?
- 19. javax.persistence.Id和org.springframework.data.annotation.Id有什麼區別?
- 20. @Inject和@Autowired有什麼區別
- 21. Class Path和Build Path有什麼區別
- 22. .ivy2和.m2有什麼區別
- 23. xtype和別名有什麼區別?
- 24. spring:bind和form:errors有什麼區別?
- 25. 有什麼區別
- 26. 有什麼區別
- 27. 有什麼區別?
- 28. 有什麼區別?
- 29. 有什麼區別?
- 30. 有什麼區別
在autowired情況下可以捕獲appContext/beanFactory設置事件嗎?在構造函數中,appContext/beanFactory尚未設置... – ksimon 2012-03-12 15:43:47