spring核心之IOC
spring IOC? ?控制反轉(zhuǎn)? ? 核心思想
了解IOC,首先需要了解DI? --- 軟件設(shè)計(jì)的重要思想? ? ? ? ? ? 依賴注入
什么事依賴注入呢?
例子:設(shè)計(jì)行李箱類
傳統(tǒng)寫法:首先設(shè)計(jì)輪子,根據(jù)輪子設(shè)計(jì)底盤,根據(jù)底盤設(shè)計(jì)箱體。OK,設(shè)計(jì)完成。
? ? ? ? ? ? 換成java中類的描述:1.輪子類:Class Tire { int size;//輪子大小? ?Tire(){this.size = 20;}}? ?2.底盤類 : Class Botton {Tire tire;//輪子? ?Botton(){this.tire =?new? tire;}}
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3.箱體類:Class FrameWork{ Botton botton;//底盤? FramWork() {this.botton =?new? botton;}}
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 生成一個行李箱:new FrameWork();
? ? ? ? ?上層建筑依賴下層建筑。每當(dāng)需要設(shè)計(jì)一個新式的行李箱,則需要從輪子到箱體全部需要重新寫代碼,嚴(yán)重違反了代碼的可重用性;
DI寫法:首先設(shè)計(jì)箱體,根據(jù)箱體選擇底盤,根據(jù)底盤選擇輪子。OK,設(shè)計(jì)完成。
? ? ? ? ? ? 換成java中類的描述:1.輪子類:Class Tire { int size;//輪子大小? ?Tire(int size){this.size = size;}}? ?2.底盤類 : Class Botton {Tire tire;//輪子? ?Botton(Tire tire){this.tire =? tire;}}
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3.箱體類:Class FrameWork{ Botton botton;//底盤? FramWork(Botton botton) {this.botton = botton;}}
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 生成一個行李箱:Tire tire = new Tire(20); Botton botton = new Botton(tire);FrameWork frameWork = new FrameWork(botton);
? ? ? ? 上層建筑控制下層建筑。將輪子,底盤類,箱體類設(shè)計(jì)成接口設(shè)計(jì),每次只需在main方法中注入即可,不需要修改過多的代碼量,需要什么樣的輪子全部繼承輪子接口。
依賴注入減少了我們重復(fù)修改源代碼。
依賴注入的幾種方式:setter方法,Construsctor構(gòu)造方法注入(上面實(shí)現(xiàn)的那種)
當(dāng)然我們的IOC可不止這點(diǎn)技能,我們的IOC作為容器的存在,當(dāng)然是海納百川
1.bean工廠,將各種bean對象注入到IOC容器中統(tǒng)一維護(hù),做到隨用隨取。隱藏了各種注入細(xì)節(jié)。
IOC容器運(yùn)行機(jī)制:
?
?
實(shí)例化bean運(yùn)用到了java的反射機(jī)制
?
IOC容器支持的功能:依賴注入,依賴檢查,自動裝配,支持集合,指定初始化的銷毀方法(這就和spring的另一個基礎(chǔ)核心內(nèi)容AOP相關(guān)),支持回調(diào)方法。
?
轉(zhuǎn)載于:https://www.cnblogs.com/ZTYCandy/p/11438534.html
總結(jié)
以上是生活随笔為你收集整理的spring核心之IOC的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql 连接查询
- 下一篇: Flutter 以Dialog Acti