在前一篇文章中介紹瞭如何構建源碼閱讀環境,既然構建好了源碼環境,本地也能夠正常運行,那就開始閱讀源碼吧!html
在閱讀源碼時,會參考官方文檔,不少概念在官網均可以獲得答案,有興趣的小夥伴們能夠繼續閱讀,當作複習,寫的不足之處,但願多多指導。java
IoC(Inversion of Control),即控制反轉。spring
以前是在對象內部 new 建立其餘對象,而後使用。ide
而如今 Spring 中有一個容器能夠在建立管理這些對象,而且將對象依賴的其餘對象注入到這個對象中,這些對象的建立、銷燬都由 Spring 進行管理。學習
相比之前來講,再也不由本身控制其餘對象的生命週期,這個過程就叫作控制反轉。而負責統一管理這些類的容器就叫作 IoC 容器。spa
IoC is also known as dependency injection (DI).
code
是否是感受奇奇怪怪的,爲何說:IoC 也稱爲 DI
。htm
其實 IoC 和 DI 是同一個概念的不一樣角度描述。對象
依賴注入是指組件之間的依賴關係由容器在運行期決定,形象的說,即由容器動態的將某個依賴關係注入到組件之中。blog
經過依賴注入機制,咱們只須要經過簡單的配置,而無需任何代碼就可指定目標須要的資源,完成自身的業務邏輯,而不須要關心具體的資源來自何處,由誰實現。
Spring 是經過 DI 實現 IoC 的。
Bean 是一個由 Spring IoC 容器實例化,組裝和管理的對象。
相信你們都寫過或者見過下面的代碼:
/** * 從容器中獲取對象 * @author liuzhihang * @date 2020/4/6 19:02 */ @Component public class CustomBeanFactory implements ApplicationContextAware { private static ApplicationContext ctx; @Override public void setApplicationContext(ApplicationContext ac) throws BeansException { ctx = ac; } public static Object getBean(String beanName) { return ctx.getBean(beanName); } }
代碼邏輯很簡單,就是從容器中獲取到指定名稱的 Bean
,而其中 ApplicationContext
接口其實就是 Spring IoC 容器。
固然 ApplicationContext
是一個接口,它有不少實現,而它也繼承了 BeanFactory
。
雖然 BeanFactory
是 IoC 容器的最基本的形式,可是 ApplicationContext
對其進行了不少擴展,並具備 BeanFactory
的全部功能,一般建議優先使用 ApplicationContext
。
在經過Spring 官網 瞭解了 IoC 、DI 、容器和 Bean 的概念後,再結合日常的使用基本上能夠有個大概流程。
固然,這只是一個很粗略的猜測,是否正確,還有待後面繼續閱讀源碼,而後去驗證。