Spring以其逆向控制和DI而聞名。
我知道依賴注入有幾種方法,比如建構式依賴注入等。
例如
我們通常使用@Autowired注解來進行依賴注入。
當我們開發 MVC Web 專案時。
我的問題很簡單
為什么spring框架是松耦合的?
假設我們有兩個 Dao 類一個是 Dao1,另一個是 Dao2
道1
public class Dao {
public void sayhi() {
System.out.println("hello");
}
}
道2
public class Dao2 {
public void saygoodbye() {
System.out.println("say goodbye");
}
}
如果我們不使用Autowired注解
該服務應該是
public class Service {
Dao1 dao=new Dao1();
Dao2 dao2=new Dao2();
public void sayhi() {
dao.sayhi();
}
public void saygoodbye() {
dao2.saygoodbye();
}
}
控制器應該是
@RestController
public class Controller {
Service service=new Service( );
@GetMapping("test")
public void saysomething() {
service.saygoodbye();
service.sayhi();
}
}
如果我們不使用Autowired注解,我們必須使用 new 關鍵字來創建實體
如果我們使用Autowired注解
代碼
Dao1 dao=new Dao1();
Dao2 dao2=new Dao2();
把它改成
@Autowired
Dao1 dao
@Autowired
Dao2 dao2
所以,沒有自動裝配注釋
為什么spring框架是松耦合的?
uj5u.com熱心網友回復:
如果使用new關鍵字,則Service需要知道如何實作Dao1和Dao2實體化(具體型別,引數...),更多的知識意味著更多的耦合。
但是,如果您使用@Autowired,那么 Spring 通過Dependency Injection技術為您做所有事情,耦合變得更加松散。
松散耦合的優點是:您的代碼變得更加可測驗和可維護。
uj5u.com熱心網友回復:
您應該閱讀依賴注入的許多好處,這是一個很好的起點:https ://en.m.wikipedia.org/wiki/Dependency_injection 。
但是如果你想要一個簡短的答案,它的主要好處是它使代碼更容易測驗。
如果您在服務類中使用 new 關鍵字創建 DAO 類,則在測驗服務類期間無法輕松地將它們替換為模擬物件。
uj5u.com熱心網友回復:
首先,請注意,Spring 多年來一直不鼓勵欄位注入。其次,依賴注入本身并不能神奇地保證松耦合。抽象也是必要的。由于這些示例中沒有抽象,因此無論您注入還是實體化它們,Service都與實作緊密耦合。Dao
Spring 在這里仍然提供其他好處,包括生命周期管理和內聚。另請注意,由于Dao類不是final,因此有可能進行抽象,因為 Spring 可以注入子類,而直接實體化始終會為您提供基類。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/453527.html
上一篇:檢查字典是否為空但有鍵
