Spring控制反轉(IOC:實現+原理)


 

控制反轉

1.概述

Spring有IOC和AOP兩個核心。其中IOC我們說的控制反轉,也就是將創建對象並生命周期的管理過程交給Spring處理。在開發中不再需要關注對象的創建和聲明周期的管理,我們需要式由Spring框架提供,這個由Spring管理創建對象和生命周期的機制稱為控制反轉。創建對象的權力轉給框架,他幫我們創建,我們不再使用new關鍵自來創建對象。

 2.原理

創建過程

在初始化一個Spring容器時,Spring會解析spring的配置文件(applicationContext.xml),從上到下解析到<bean id=””,class=””>時,根據標簽中的class屬性指定的類的全路徑名找到該類並通過反射來創建該類的對象,並創建的對象存入到內置的Map容器中管理,其中存入map中的鍵是該標簽中的id值,值是創建的對象。

獲取對象過程

當通過context.getBeans("id值")方法來從容器中獲取對象時,根據id從內置的Map中尋找是否有匹配的鍵值,如果有返回對象,如果沒有拋出異常。

提示:默認情況下,多次獲取同一個id的bean對象得到的是同一個對象(默認情況下創建的對象是單例的,如果需要多例可以該標簽中設置多例)。如果使用一個類配置多個<bean>標簽設置不同的id ,每個id都會在內置Map中有一個鍵值對,其中的值是這個類創建的不同的對象。同一個<beans>標簽下不允許配置多個同id的<標簽>,如果配置會報錯。

 

3.實現

首先創建lib目錄導入需要依賴的包並buildpath:這些包可以spring官網下載也可以其他遠程倉庫可以下載。

提示:我們這里只是入門使用這種導入方式,后面不需要這樣導入,開發中直接maven來自動導入)

 

 

依賴包導入后在指定包中創建一個Person類(為了使用創建對象)

package com.test.spring;

public class Person {
    public void say(String str) {
        System.out.println(str);
    }
}

然后在src目錄下創建spring的配置文件applicationContext.xml。在這個配置文件中實現IOC控制反轉,也是創建對象負責這個配置文件,我們不需要自己通過new關鍵字來創建對象。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
            <bean id="person" class="com.test.spring.Person"></bean>
</beans>

在這里我們在<bean id=””,class=””>里面設置我們需要創建對象的類信息,class里面填寫我們需要創建類的名,spring容器通過這個類名來找到這個類進行加載,然后通過id來給創建的對象設置id,我們使用的時候通過這個id來找到實力化的對象。id可以自定義設置例如:person1,person2,。。都可以,一般使用類名的小寫使用。

注意:<beans >配置內容中不要多余的空格,會報錯的,版本需要一致。按規范來寫。

 

我們配置文件中配置好以后創建Person_test的測試類進行測試:

package com.test.spring;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class Person_Test {
    @Test
    /**
     * SpringIOC獲取對象
     * <bean id="person" class="com.test.spring.person">
     */
    public void test01() {
        //創建Spring容器對象
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //通過我們配置文件中面配置的beanid來獲取對象:id="person"
        Person p = (Person)context.getBean("person");
        //調用對象的方法,並傳人參數
        p.say("Hello SpringIOC");
        p.say("Spring控制反轉");
    }
}

這里的@Test做測試使用的必要需要測試的方法上面插入再通過右鍵—Run as ---JUnit來Junit的方式運行,打印結果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM