兩者都可以用來獲取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 CGLIB和CGLIB有什麼區別?
- 2. DAO和Spring Beans有什麼區別?
- 3. Spring-WS WebServiceTemplate:HttpUrlConnectionMessageSender和HttpComponentsMessageSender有什麼區別?
- 4. Spring和Spring.net有什麼區別嗎?
- 5. spring-context和spring-core依賴關係有什麼區別?
- 6. spring-boot:run和spring-boot有什麼區別:開始
- 7. spring 2.5和spring 3.x有什麼區別?
- 8. Spring Data-JPA與JPA:有什麼區別?
- 9. 有什麼區別`和$(Bash中有什麼區別?
- 10. 有什麼區別? :和||
- 11. &&和||有什麼區別?
- 12. 「/」和「/ *」有什麼區別?
- 13. 有什麼區別:。!和:r!?
- 14. ==和===有什麼區別?
- 15. Appender和〜有什麼區別?
- 16. $ @和$ *有什麼區別?
- 17. is和=有什麼區別?
- 18. #.00和#。##有什麼區別?
- 19. `==`和`is`有什麼區別?
- 20. '=='和'==='有什麼區別?
- 21. /和/#/有什麼區別?
- 22. | 0和~~有什麼區別?
- 23. `&`和`ref`有什麼區別?
- 24. ==和===有什麼區別?
- 25. ==和===有什麼區別?
- 26. `{}`和`[]`有什麼區別?
- 27. JavaScript和=== ===有什麼區別?
- 28. difftime和' - '有什麼區別?
- 29. =和==有什麼區別?
- 30. org.springframework.security.oauth和org.codehaus.spring-security-oauth有什麼區別?
在autowired情況下可以捕獲appContext/beanFactory設置事件嗎?在構造函數中,appContext/beanFactory尚未設置... – ksimon 2012-03-12 15:43:47