1. 程式人生 > 實用技巧 >spring——IOC理論

spring——IOC理論

這裡主要是對於IOC理論提出的一個認識

  1. dao介面

    public interface Fruit {
        String getFruit();
    }
    
  2. dao介面的實現類

    public class FruitImpl implements Fruit {
        public String getFruit() {
            return "Buy Some fruit";
        }
    }
    
  3. 服務層介面

    public interface UserService {
        String buyFruit();
    }
    
  4. 服務層實現類

    public class UserServiceImpl implements UserService{
        Fruit fruit;
    
        public UserServiceImpl() {
            fruit = new FruitImpl();
        }
    
        public String buyFruit() {
            return fruit.getFruit();
        }
    }
    
  5. 測試:

    public static void main(String[] args) {
        UserServiceImpl userService = new UserServiceImpl();
        System.out.println(userService.buyFruit());
    }
    //輸出:Buy Some fruit
    
  6. 新需求:

    注:以買水果為例(之前在知乎看到的示例),在service層的實現類中,由程式設計師選擇特定的商品Fruit交給客戶,但是這樣一來,如果遇到特殊的需求(比如要更換購買的水果,比如香蕉,蘋果…),我們需要另外寫dao層的介面實現類.

    public class Aplle implements Fruit {
        public String getFruit() {
            return "Buy some Applle";
        }
    }
    
  7. 控制權反轉(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)