為什麼說我們這篇文章只是說了解一下BeanFactory。因為BeanFactory內在的機制與代碼實現實在是太強大了,在這一點我確實不敢濫竽充數。
1. 那麼我們又如何去了解BeanFactory,大家可以從它所具備的功能和作用去了解。
- 我們都知道Spring框架有一個明顯的作用就是它的IoC容器,所謂的IoC容器就是幫我們自動new對象,對象的生命週期交給Spring管管理
- 而在Spring官方文檔中談到的Bean,其實就是我們說的由Spring IoC容器new出來的對象。這一點我個人認為大家可以注意一下
- 在Spring框架中真正的能夠new一個對象,能夠提供對象之間的依賴關係。其幕後使者就是BeanFactory
2. BeanFactory只是一個接口,那麼要初始化BeanFactory則需要它的子類。
例如下面的代碼
<code>BeanFactory beanFactory = new ClassPathXmlApplicationContext("spring.xml");/<code>
但是通過上面的代碼我們好像又看到BeanFactory的另一個作用,可能這個作用能夠代表Spring框架啟動的流程
- 首先是讀取Spring的xml配置文件,然後解析xml文件中的各種bean的定義,將xml文件中的每一個<bean>元素分別轉換成一個BeanDefinition對象,其中保存了從配置文件中讀取到的該bean的各種信息
- 然後通過BeanDefinitionRegistry將這些bean註冊到beanFactory中
- 最後實例化階段主要是通過反射或者CGLIB對bean進行實例化
3. 瞭解BeanFactory中的getBean方法
- getBean(String name): 獲取對象,但是需要類型轉換
- getBean(String name, Class
clazz):獲取對象,無需類型轉換 - 需要注意的地方
- 如果使用getBean(String name, Class
clazz)方法一定要關注Spring框架版本,在spring.4.x版本中提供了getBean對泛型的支持 - 如果使用spring.4.x版本,需要包含下面的jar包(spring-core.jar, spring-beans.jar, spring-context.jar, spring-expression.jar, common-logging.jar)
閱讀更多 知了堂 的文章