用spring作了幾個項目後發現,對spring的IOC理解仍是不夠清晰,今天就來總結下本身的理解(我的的一些看法)spring
之前用jsp+servlet作網站時,只是分了顯示層(jsp),控制層(servlet),和數據模型層,很傳統的MVC三層架構,各層之間的耦合我架構
就不說了(感受就是一鍋粥...)。jsp
後來學了spring+hibernate開發網站,有多出來了一個服務層(service),不過一直都是拿它來調用dao層的,並無感受它有什麼用網站
(原諒我是一個彩筆...),所謂的業務邏輯也放在了控制層(controller)裏完成了 ==!。不過各層之間耦合度明顯下降了(哈哈哈,由於用了hibernate
spring啊...)。之前用jsp+servlet時,想用哪一個層的哪一個對象直接new就行了,哪管那麼多了。如今不同了,spring是個好東西啊,IOC和AOP對象
能夠說就是spring的核心功能了,固然,spring的強大可不止這點。今天我要總結的是spring的IOC容器管理bean。service層要調用dao層,Controller接口
層要調用service層,這層與層之間的調用可不是直接new出來就行了,首先你要面向接口開發,面向接口開發配合spring的IOC能夠顯著下降各層之間的開發
耦合度,就拿Controller層調用service層來講吧,在controller層調用須要使用的service接口,構造方法或set方法注入,具體調用哪一個service實現類這servlet
個就不歸controller管了,spring負責爲這個controller注入具體調用的實現類,默認狀況下spring管理的bean是單例的,在IOC容器內只會建立一個bean容器
對象,各個controller層調用的固然也就是這一個bean對象了,不過這個看需求,能夠配置爲多例。這樣controller控制層就不會與service服務層產生過多
耦合,由於controller要用到的具體service對象是由spring建立的,spring管理了注入依賴關係的過程,而controller調用的只是service接口,這樣他們之
間的耦合是否是降到了最低。
上面一直在說「耦合」,那到底什麼是所謂的耦合呢。我所理解的耦合就是層與層之間的關係過於緊密,例如controller層想要調用一個service層的具體對象,
能夠在controller層直接new不就得了,而後controller層還須要service層的另外一個具體對象,那它再new一個,反正想要用哪一個就new哪一個,也很方便,功能
同樣能夠實現,還不須要定義那麼多接口,管理那麼多的實現關係。固然,這在開發小項目在開發過程當中是沒問題的,可是,小項目後期也是要維護的啊,你一個
controller層new了那麼多service層的具體實現類,怎麼想要擴展功能,修改需求,那改動可不是通常的大啊,修改bug也很煩有木有,就像打地鼠同樣,這個bug
改完又會出現別的bug,真的很煩啊。這就是耦合太高的緣故。