跳转至

IoC + DI + @Component + bean + @Autowired

主要內容

Spring IoC 名詞

  • IoC Inversion of Controll ,控制反轉
  • DI dependency Injection ,依賴注入
  • Bean 存放在Spring Container裡面的object
  • @Component 加在class上 ,將改class變成Spring容器所管理的bean
  • @Autowired 加在變數上 ,取得Spring容器中的bean

IoC (Inversion of Controll 控制反轉)

使用java的概念

Interface 介面

Polymorphism 多型

public interface Printer{
    void print(String msg);
}
public class HpPrinter implements Printer{
    @Override
    public void print(String msg){
        System.out.println("HP印表機: " + msg );
    }
}

public class Teacher{
    private Printer printer = new HpPrinter();
    public void teach(){
        printer.print("I'm a teacher");
    }
}

public class Student{
    private Printer printer = new HpPrinter();
    public void learn(){
        printer.print("I'm a student");
    }
}
當有一台新的印表機時就需要改成

public class CanonPrinter implements Printer{
    @Override
    public void print(String msg){
        System.out.println("Canon印表機: " + msg );
    }
}
老師跟學生也需要去 new CanonPrinter

每換一個牌子就需要把有使用到印表機的部分都改一遍

所以!

我們改成只定義一個Printer的變數

但不會new 印表機給他 ,

程式運行Spring啟動Spring 容器(Container) 由Spring 創建印表機 ,存放在 Spring Container

老師跟學生不需要知道印表機廠牌是什麼 ,只需要有一台印表機可以使用就好了

public class Teacher{
    private Printer printer;
    public void teach(){
        printer.print("I'm a teacher");
    }
}

public class Student{
    private Printer printer;
    public void learn(){
        printer.print("I'm a student");
    }
}