Re: [請益] Spring boot的依賴注入降低耦合的例子
比較早版本的spring 只能利用xml來依賴注入
其實反而比較好理解
spring 如果只有設定好xml的依賴注入
但是沒有設好依賴反轉(也就是宣告成介面)
那就會發現
當你要新增一個功能時 還是要去改動程式碼
但如果宣告成介面
而流程也沒有改變
但需要新功能時
其實只要新增一個實作,並改動xml
就能解決問題
這是最接近開閉原則
不修改軟體 但可以擴展軟體
類似任天堂換遊戲就換卡匣的方式
修改xml 就是 把卡匣拔出來 換新卡匣
後面的spring 改成可以用註解跟設定檔(config.java)的方式
反而會比較不好理解
因為都像是在改程式
補充一下任天堂的類比:
所有的遊戲卡匣只要遵循卡匣介面實作幾個方法
上 方法()
下 方法()
左 方法()
右 方法()
A 方法()
B 方法()
開始()
。。()
就能在任天堂主機裡被使用(xml抽換卡匣)
但如果今天有一個卡匣硬是多了一個C按鈕與C方法
而為了使生效,那就只能去修改任天堂主機(違反開閉原則)
--
老實說這是最差的 等同把xml當動態語言使用 資料交換
格式當語言是很糟糕的 沒有補全也難以除錯
如果是怕xml打錯 spring會提供基本的除錯 最理想的設計情況 是只要新增calss 就能完成功能修改 程式主體完全不用動 測試上就少了很多 spring boot 比 spring 方便許多 但也因為他省略了很多設定 直接學spring boot會比較不好理解 其實spring 是用反射機制去xml找出class檔 幫你new出來 所以也不一定要寫在xml上 其他文字檔理論上也可以(但可能就要自己寫一套) 只是你如果注入是寫在註解或config.java 很難去解釋為什麼還是要去更動程式主體才能完成功能修改 但如果是寫在xml或文字檔 你就可以說 這次只要新增calss就能完成任務 不用動到程式
把xml換成json 接受度會不會高一點
json比xml更像資料 類似簡化的xml 反而xml說是設定檔 還比較可以接受 可以用config.java 但心裡歸類成xml
※ 編輯: chal (36.235.66.147 臺灣), 04/21/2022 12:28:50我知道 但這樣有不少缺點 json的話好一點但差不多 就
說到這了
20
在這個時代依賴注入最重要的用途,特別是在後端開發是讓Application 在多個不同的 環境下(Development, Production, local, etc) 能夠根據profile 組出能正確執行的Application 多型在這裡當然有他的地位,但是一般來說,大部分不接觸system boundary的service objects 是不太需要多型的,如果是java,那種一個interface 只有一個implementation2
來補一下 "如何驗證效果" 的部份 首先假設情境, A 是你的 Web App B 是那個要被 Spring 注入的東西, 假設在 "外部" "其它人開發的 jar" 裡面 驗證的項目 1. B "改變" 時, A 需要做哪些事?10
很久沒寫Java了 就個人觀念提供簡單思考線索 基本上根據你的內容覺得你對解耦合還沒有很理解 講直白一點 當你import類別就是耦合了17
先講結論: DI(Dependency Injection) 跟 IoC(Inversion of Control) 的原始目的都不是解耦 接著說明一下 DI 跟 IoC: 首先 IoC 的目的是控制權的轉移,如原 PO 文章裡面原本是在 Employee 裡面 new Address,而採用 IoC 之後這樣的行為就轉移到外部來決定25
首Po推文有個連結有解答我的疑惑 感謝bron大 文章有點長 先說說我對依賴注入的理解 Spring boot