Soft_Job 板


LINE

來補一下 "如何驗證效果" 的部份 首先假設情境, A 是你的 Web App B 是那個要被 Spring 注入的東西, 假設在 "外部" "其它人開發的 jar" 裡面 驗證的項目 1. B "改變" 時, A 需要做哪些事? ex: B 的 package 名改了, A 要? 1-1. 什麼都不用做只要改 springboot config, 1-2. 要改 code, 1-3. 要重新 build 2. 要將 A 中的 B 替換成 C/D/E 時, 需要做哪些事? 2-1. 什麼都不用做只要改 springboot config, 2-2. 要改主程式裡的 import 並重 build 2-3. 要改很多檔案裡的 import 敘述並重 build 2-4. 甚至還要改一卡車方法名, 連帶的傳入參數類型, etc 然後想想看, 假如 A 是你在維護, 然後發生第 1 點的狀況 或者 A 是你買來的系統, 然後你想做第 2 點的事情如換個資料庫、換個連線 lib 或者你想在 B 沒完工確定前先寫測試測 A 的流程跟邏輯 是能自己很容易做到, 還是得請原開發者幫忙甚至再重出一版 把各種做法, 包括 直接依賴實體、A/B 都依賴於 A 中所定義的介面、 使用 Spring 注入, 在主程式自己 new 自己塞等等, 通通用上面幾項確認一下, 大概就知道效果在哪了 -- 很久沒寫 Java 插個花科科 ※ 引述《ntpuisbest (阿龍)》之銘言: : 推文有個連結有解答我的疑惑 : 感謝bron大 : 文章有點長 : 先說說我對依賴注入的理解 : Spring boot : 依賴注入大致有三種方式 : 透過建構子的 透過setter的 或是 field : 這三種都可以透過@Autowired註解來達到依賴注入的效果 : 我自己想到的建構子的舉例是 : 假設有兩個類 Address 和 Employee好了 : 1. : public class Address { : String Country; : String City; : String Street; : public Address(String country, String city, String street) { : Country = country; : City = city; : Street = street; : } : } : 2. : public class Employee { : String sex; : String name; : Address address; : // 沒有依賴注入的方式 : public Employee(String Country,String City,String Street,String : sex, String name ) { : this.sex=sex; : this.address = new Address( Country, City,Street ); : this.name=name; : } : // 有依賴注入的方式 : public Employee(String sex, String name, Address address) { : this.sex = sex; : this.name = name; : this.address = address; : } : } : 在上面的例子當中可以發現,如果哪一天 : Address這個類新增了一個屬性叫 phoneNumber好了 : 沒有依賴注入的方式,必須要更改 Employee 的 : this.address =new Address(Country,City,Street,phoneNumber) : 而有依賴注入的方式確實降低了耦合 : 因為他不用更改Employee的建構方式 : 所以我理解依賴注入可以降低耦合 : 所以我理解依賴注入可以降低耦合 : 所以我理解依賴注入可以降低耦合 : 但我的問題是Spring boot 的 autowird annotation 有幫助我們降低耦合嗎 : 在常見的開發中 我們經常都會有 Dao 以及 Service : 假設我有兩個 Dao 好了 分別是 Dao1 和 Dao2 : 以及一個Service : Dao1 : public class Dao { : public void sayhi() { : System.out.println("hello"); : } : } : Dao1 : public class Dao { : public void sayhi() { : System.out.println("hello"); : } : } : Dao2 : public class Dao2 { : public void saygoodbye() { : System.out.println("say goodbye"); : } : } : 如果我不在service上面使用autowired : 我的service會是 : public class Service { : Dao1 dao=new Dao1(); : Dao2 dao2=new Dao2(); : public void sayhi() { : dao.sayhi(); : } : public void saygoodbye() { : dao2.saygoodbye(); : } : } : 如果我使用了@Autowired註解 : 那我只是將 : Dao1 dao=new Dao1(); : Dao2 dao2=new Dao2(); : 替換成 : @Autowired : Dao1 dao : @Autowired : Dao2 dao2 : 我想請問所以我使用了Autowired註解 : 我知道我可以不需要使用new 來建構實體 : 但 Spring 真的有幫我降低耦合嗎 : 即使我換成 setter 配合 autowired的方式好了 : 那個 setter也是要我自己去撰寫 : Spring 幫我降低了耦合甚麼? : 我的問題簡單來說就是 : 我知道依賴注入可以降低耦合 : 但Spring boot透過 @Autowired註解幫我降低耦合在哪 : 謝謝 : p.s 因為面試的時候常常被面試官問說懂不懂甚麼是 : 控制反轉還有DI,我基本上舉例都舉 Address還有 Employee的例子 : 但當我反問下面例子的時候,他們好像也說要再回去想一下... : 只有其中一個就說更複雜的例子會用到,但也沒說甚麼是更複雜的例子QQ --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.37.200.216 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Soft_Job/M.1648827062.A.C39.html
1F:推 yupog2003: 這篇對我來說很好懂 04/02 08:53
2F:推 s06yji3: thanks 04/03 10:44







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP