Re: [請益] Spring boot的依賴注入降低耦合的例子

作者: Jichang (C.C.Lemon)   2022-04-02 10:31:40
其實就是在做 instance 的管理
物件導向一個很重要概念就是 多型
所以你可以在 runtime 再決定 instance 到底是什麼
IoC 就是實體是外部送進來 不要自己去 new
DI 只是在提示 要送東西進來的人說 你想要的是什麼東西
例如我們可以用 interface 用 name 用 類型等等
來提示我想要的實體是什麼
就這麼簡單而已
那這有什麼好處呢... 好處很多
以你那個例子
如果 Server1 產生了 dao1
如果 Server2 也想要這個實體的時候 你要怎麼把這個實體送過去給 Server2
你可能要寫成
main{
server1 = Server1()
server2 = Server2(server1.dao1)
}
如果你的實體都是個別產生的時候 你就要想辦法去維護這些關係
但是你會說 Server2 可以自己 new 這種也只是一種實體管理的特例 prototype
但是這樣你會有 2個 實體 就要看裡面的特性來決定是否正確
另外還有個問題是 當你自己 new 的時候 很比較缺乏彈性
例如你是 接手開發 Dao1 的人 你想要去做裡面的 override
比較理想的改法是
你寫一個子類別 Dao11 繼承 Dao1 (例如 Dao1 是第三方的 lib)
但是如果你是寫成 Server1 去 new Dao1
你要怎麼把 Dao11 送進去給 Server1
再來就是統一的容器管理 有一個好處就是 他可以在容器裡面幫我們加工
所以可以加上新的 life cycle 可以送 event 可以做 aop 等等
另外有一點就是 早期的 di 是透過 xml 來設定的
這樣有一個很大的好處是 不用重新編譯
現在雖然都是透過 annotation or java config
但是也都是可以透過 application.yaml 來 override
達到不用重新編譯就可以替換的效果
作者: superpandal   2022-04-02 23:05:00
不管annotation還是config都有個問題 就是隱藏實作細節導致你沒坑到你不知道... 除非你是原作者做的越多你就離計算機愈來愈遠 冏

Links booklink

Contact Us: admin [ a t ] ucptt.com