天天看點

Spring(一)——IOC和DI的簡單了解

Spring是一個IOC(DI)和AOP容器架構,并且是開源的。

1.IOC和DI

比較官方的說法:

•IOC(Inversion of Control):其思想是反轉資源擷取的方向. 傳統的資源查找方式要求元件向容器發起請求查找資源. 作為回應, 容器适時的傳回資源. 而應用了 IOC 之後, 則是容器主動地将資源推送給它所管理的元件, 元件所要做的僅是選擇一種合适的方式來接受資源. 這種行為也被稱為查找的被動形式。

•DI(Dependency Injection) — IOC 的另一種表述方式:即元件以一些預先定義好的方式(例如: setter 方法)接受來自如容器的資源注入. 相對于 IOC 而言,這種表述更直接。

我的了解:

  • IOC:控制反轉,反轉資源擷取的方向。 隻是一種設計思想,意味着将你設計好的對象交給容器控制,而不是傳統的在你的對象内部直接控制。
public class HelloWorld {
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public void hello(){
        System.out.println("hello: " + this.name);
    }
}

// 傳統
// 1.建立一個HelloWorld對象
HelloWorld helloWorld = new HelloWorld();
// 2.對象進行指派
helloWorld.setName("張三");
// 3.調用方法
helloWorld.hello();

// Spring
// 1.建立Spring的IOC容器對象
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// 2.從IOC執行個體中擷取Bean執行個體
HelloWorld helloWorld = (HelloWorld)context.getBean("helloWorld", HelloWorld.class);
// 3.調用方法
helloWorld.hello();
           
  • DI:依賴注入,依賴用容器把資源注入

2.IOC 容器 BeanFactory & ApplicationContext 概述

  • ApplicationContext代表IOC容器,是一個接口,也可以使用BeanFactory來建立IOC容器,不過常用ApplicationContext。
  • ApplicationContext的主要實作類:
    • ClassPathXmlApplicationContext:從類路徑(src)下加載配置檔案,也可以自己指定,但需要全類名
    • FileSystemXmlApplicationContext:從檔案系統中加載配置檔案
    • Spring(一)——IOC和DI的簡單了解
    • ConfigurableApplicationContext 擴充于 ApplicationContext,新增加兩個主要方法:refresh() 和 close(), 讓 ApplicationContext 具有啟動、重新整理和關閉上下文的能力(這個先了解,後面再學)
    • ApplicationContext在初始化上下文時就執行個體化所有單例的Bean
  • ApplicationContext的方法
    • getBean():從IOC容器中擷取Bean,該方法是父接口(BeanFactory)的方法
      • 是一個重載方法,可由如下建立
      • Spring(一)——IOC和DI的簡單了解
        不推薦使用該方法,要是有多個相同類型的Bean,就不知道要擷取哪一個執行個體
      • Spring(一)——IOC和DI的簡單了解
      • Spring(一)——IOC和DI的簡單了解