javascript
Spring思维导图(IOC篇)
寫(xiě)在前面
寫(xiě)過(guò)java的都知道:所有的對(duì)象都必須創(chuàng)建;或者說(shuō):使用對(duì)象之前必須先創(chuàng)建。而使用ioc之后,你就可以不再手動(dòng)創(chuàng)建對(duì)象,而是從ioc容器中直接獲取對(duì)象。
就好像我們無(wú)需考慮對(duì)象的銷毀回收一樣,因?yàn)閖ava垃圾回收機(jī)制幫助我們實(shí)現(xiàn)了這個(gè)過(guò)程;而ioc則是讓我們無(wú)需考慮對(duì)象的創(chuàng)建過(guò)程,由ioc容器幫我們實(shí)現(xiàn)對(duì)象的創(chuàng)建、注入等過(guò)程。
Spring知識(shí)細(xì)節(jié).png
控制反轉(zhuǎn)
Spring ioc簡(jiǎn)介.png
spring ioc容器
在Spring框架中的核心組件只有三個(gè):Core、Context和Bean。它們構(gòu)建起了整個(gè)Spring的骨骼架構(gòu),沒(méi)有它們就不可能有AOP、Web等特性功能。
Spring 整體結(jié)構(gòu)圖.jpg
如果說(shuō)在三個(gè)核心中再選出一個(gè)核心,那就非Bean莫屬了。可以說(shuō),Spring就是面向Bean的編程,Bean在Spring中才是真正的主角。
Spring為何如此流行?你會(huì)發(fā)現(xiàn)Spring解決了一個(gè)非常關(guān)鍵的問(wèn)題,它可以讓你對(duì)對(duì)象之間的關(guān)系轉(zhuǎn)而用配置文件來(lái)管理,或者注解,也就是它的依賴注入機(jī)制。而這個(gè)注入關(guān)系在一個(gè)叫Ioc的容器中管理。Ioc容器就是被Bean包裹的對(duì)象。Spring正是通過(guò)把對(duì)象包裝在Bean中從而達(dá)到管理這些對(duì)象及做一些列額外操作的目的。
ioc容器.png
spring ioc初始化.png
spring ioc容器工作原理.jpg
核心組件協(xié)同工作
三大核心組件.png
BeanFactory與ApplacationContext的區(qū)別
IOC中最核心的接口是Beanfactory提供IOC的高級(jí)服務(wù),而ApplicationContext是建立在BeanFactory基礎(chǔ)之上提供抽象的面向應(yīng)用的服務(wù)。
BeanFactory 與ApplacationContext.png
3種注入方式
在Spring框架中,依賴注入(DI)的設(shè)計(jì)模式是用來(lái)定義對(duì)象彼此間的依賴。使用xml配置bean的情況下,它主要有兩種類型:
- Setter方法注入
- 構(gòu)造器注入
當(dāng)然,有了注解之后,使用注解的方式更加方便快捷。即自動(dòng)裝配功能實(shí)現(xiàn)屬性自動(dòng)注入(@autowire)。
寫(xiě)到這里,讓我想起了最近在牛客網(wǎng)上看的一道選擇題了:
下面有關(guān)spring的依賴注入,說(shuō)法錯(cuò)誤的是?A、依賴注入通常有如下兩種:設(shè)置注入和構(gòu)造注入:B、構(gòu)造注入可以在構(gòu)造器中決定依賴關(guān)系的注入順序,優(yōu)先依賴的優(yōu)先注入C、當(dāng)設(shè)值注入與構(gòu)造注入同時(shí)存在時(shí),先執(zhí)行構(gòu)造注入,再執(zhí)行設(shè)值注入D、設(shè)值注入是指IoC容器使用屬性的setter方法來(lái)注入被依賴的實(shí)例。這種注入方式比較簡(jiǎn)單、直觀牛客網(wǎng)給出的答案是選C,不過(guò)網(wǎng)友們好像對(duì)答案有不同的意見(jiàn)哈。查看網(wǎng)友評(píng)論及答案
原理解析
Spring的代碼還真是不好讀,分得太細(xì)了,文字也是難以描述出來(lái),看了別人有關(guān)的博客,貼了好多代碼,畫(huà)了好多ER圖來(lái)描述關(guān)鍵接口或類之間的關(guān)系。這么一篇這么長(zhǎng)文章下來(lái),大家也未必會(huì)認(rèn)真讀代碼,看ER圖,干脆也不跟風(fēng)了。就貼了一點(diǎn)在我看來(lái)特關(guān)鍵的代碼,嘿嘿。
context的初始化過(guò)程
當(dāng)運(yùn)行ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); 構(gòu)造方法ClassPathXmlApplicationContext(String configLocation)調(diào)用了this(new String[] {configLocation}, true, null);, 該構(gòu)造方法具體代碼如下。
ClassPathXmlApplicationContext構(gòu)造方法.jpg
refresh()方法.jpg
從時(shí)序圖來(lái)看啟動(dòng)上述初始化
容器初始化時(shí)序圖.jpg
作者:java思維導(dǎo)圖
鏈接:http://www.jianshu.com/p/6b15246a48db
來(lái)源:簡(jiǎn)書(shū)
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
轉(zhuǎn)載于:https://www.cnblogs.com/wlsblog/p/7354788.html
總結(jié)
以上是生活随笔為你收集整理的Spring思维导图(IOC篇)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 多线程并发神器--ThreadLocal
- 下一篇: 服务链路追踪(Spring Cloud