天天看點

Spring源碼學習之:模拟實作BeanFactory,進而說明IOC容器的大緻原理

spring的IOC容器能夠幫我們自動new對象,對象交給spring管之後我們不用自己手動去new對象了。那麼它的原理是什麼呢?是怎麼實作的呢?下面我來簡單的模拟一下spring的機制,相信看完之後就會對spring的原理有一定的了解。

  spring使用BeanFactory來執行個體化、配置和管理對象,但是它隻是一個接口,裡面有一個getBean()方法。我們一般都不直接用BeanFactory,而是用它的實作類ApplicationContext,這個類會自動解析我們配置的applicationContext.xml,然後根據我們配置的bean來new對象,将new好的對象放進一個Map中,鍵就是我們bean的id,值就是new的對象。

  首先我們建立一個BeanFactory接口

  然後建立一個BeanFactory的實作類ClassPathXmlApplicationContext.java

Spring源碼學習之:模拟實作BeanFactory,進而說明IOC容器的大緻原理
Spring源碼學習之:模拟實作BeanFactory,進而說明IOC容器的大緻原理

  然後配置applicationContext.xml

建立類的時候順便示範一下工廠模式,其實BeanFactory它也是一種工廠模式的。

Spring源碼學習之:模拟實作BeanFactory,進而說明IOC容器的大緻原理
Spring源碼學習之:模拟實作BeanFactory,進而說明IOC容器的大緻原理
Spring源碼學習之:模拟實作BeanFactory,進而說明IOC容器的大緻原理
Spring源碼學習之:模拟實作BeanFactory,進而說明IOC容器的大緻原理

現在來看一看效果吧,寫一個類測試一下:

Spring源碼學習之:模拟實作BeanFactory,進而說明IOC容器的大緻原理
Spring源碼學習之:模拟實作BeanFactory,進而說明IOC容器的大緻原理

由于Map容器裡面儲存的是Object類型,是以通過getBean()方法取出來的對象要強制類型轉換。