spring——IOC理論
阿新 • • 發佈:2020-07-27
這裡主要是對於IOC理論提出的一個認識
-
dao介面
public interface Fruit { String getFruit(); }
-
dao介面的實現類
public class FruitImpl implements Fruit { public String getFruit() { return "Buy Some fruit"; } }
-
服務層介面
public interface UserService { String buyFruit(); }
-
服務層實現類
public class UserServiceImpl implements UserService{ Fruit fruit; public UserServiceImpl() { fruit = new FruitImpl(); } public String buyFruit() { return fruit.getFruit(); } }
-
測試:
public static void main(String[] args) { UserServiceImpl userService = new UserServiceImpl(); System.out.println(userService.buyFruit()); } //輸出:Buy Some fruit
-
新需求:
注:以買水果為例(之前在知乎看到的示例),在service層的實現類中,由程式設計師選擇特定的商品Fruit交給客戶,但是這樣一來,如果遇到特殊的需求(比如要更換購買的水果,比如香蕉,蘋果…),我們需要另外寫dao層的介面實現類.
public class Aplle implements Fruit { public String getFruit() { return "Buy some Applle"; } }
-
控制權反轉(IOC):
同時還要修改service層的實現類,顯然這不是一個好的實現方法.讓我們做個小小的改變——在服務層的實現類中增加一個set方法,使客戶能夠主動"挑選水果":
public static void main(String[] args) { UserServiceImpl userService = new UserServiceImpl(); userService.setFruit(new Apple()); System.out.println(userService.buyFruit()); }
注:psvm -> 當前類的main函式
理解:程式主動建立物件,控制權在程式設計師手上 -> "客戶建立物件",程式被動接收物件
好處:程式設計師不用再去管理物件的建立,系統耦合性大大降低,可以專注與業務層
實現:set方法
根本目的:解耦
本質:控制反轉是一種通過描述(XML或註解)並通過第三方去生產或獲取特定物件的方式。在Spring中實現 控制反轉的是IoC容器,其實現方法是依賴注入(Dependency Injection,DI)