1. 程式人生 > >對於spring中ioc的理解(淺顯易懂)

對於spring中ioc的理解(淺顯易懂)

目錄

ioc是什麼?

首先ioc是Inversion of Control的縮寫 ,翻譯成中文就是:控制反轉的意思。接下來就把這個詞拆開來解釋

如何理解“控制”?

之前我們通過 "類名 物件名 = new 類名( )"的方式進行物件的建立,也就是說我們的程式負責物件的建立,控制了它是否被建立這件事情,這就叫做控制

如何理解反轉?

在沒有使用spring框架之前我們通過 "類名 物件名 = new 類名( )"的方式進行物件的建立,是程式主動的去建立依賴物件(也就是這個程式要想完完整整的跑起來,必須依賴的物件)。但是有了spring框架之後,有專門的IOC容器來建立這些物件,即由Ioc容器來控制物件的建立。由這個容器來幫忙建立和注入依賴物件;由這個容器幫我們建立和注入依賴物件,程式只是被動的接受依賴物件。也就是說現在主被動關係變了,從前是我們主動的去建立物件,但是現在是ioc容器幫忙建立,我們的程式去被動的接受這個物件。

為什麼出現ioc思想?

 以上是咱們之前寫程式碼的一種風格或者是有且僅有的一種方式,這樣子的話可以看出類與類之間,或者工廠與類之間,不管封裝思想用的多麼極致,都會有耦合出現。原因就在於我們是“正轉“(相對於反轉的話,我們這樣子做也可以理解成正轉吧,這個詞好像沒有,是我自己編的)但是大家看一下下面的程式碼:

<!--目前可以理解成一個bean就對應某一個類的物件,id理解成這個物件的名字,class是類的位置-->
<bean id="person" class="controller.Person">
     <!--給類中的屬性賦值  name:屬性的名字   value:屬性的值-->
     <property name="personName" value="Tom"></property>
     <property name="age" value="19"></property>
</bean>

以上程式碼你看著也許會陌生,但是先不要想太多,也不要恐懼,這就是在一個xml檔案中的配置,而這個配置的作用就是給某一個類的屬性賦值。其中這個類如下:

public class Person {
    private String personName;
    private int age;

    public String getPersonName() {
        return personName;
    }

    public void setPersonName(String personName) {
        this.personName = personName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

 ok,你就理解成,現在一個物件已經創建出來了,要是想在哪個類裡面用的話,就如以下程式碼:

public class Test2 {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("META-INF/beanguanxi.xml");
        //上面的程式碼先暫時不要管,就管下面的
        Person person = (Person) applicationContext.getBean("person");
    }
}

 現在物件已經建立好了,但是你在Test2中沒有看到"類名 物件名 = new 類名()"這種形式。這樣子有什麼好處嘞?好處就是:如果這個物件後期需要修改的話,就直接在上面那個xml配置檔案中修改就可以了,只要那裡一改,其他用這個物件的地方全部都改了。滿足了軟體程式設計中的:高內聚,低耦合的思想。