瞭解Spring IOC容器

什麼是Spring IOC容器?

IOC容器,全稱(Inversion of Control),即控制反轉,是Spring框架的核心功能之一,它把傳統上由程序代碼直接操控的對象調用權交給了容器,通過容器來實現對象組件的裝配和管理,利用了java反射機制。

Spring IOC負責創建對象,管理對象(通過依賴注入(DI)),裝配對象,配置對象,並且管理這些對象的整個生命週期,所以IOC就像一個存放對象的容器。

通俗理解,就是使用者只需要把自己需要用到的對象告知Spring,然後直接聲明使用,Spring就可以把這些所需的對象創建準備好,要用的時候直接就可以拿來用了,這樣就不需要在程序中創建對象,消除了硬編碼,降低了類之間的依賴關係。

好處:在實際的項目開發中,往往需要通過類與類之間的相互協作來完成特定的業務邏輯,這個時候,沒個類都要管理與自己有交互的類的引用和依賴,這樣就使得代碼的維護異常困難並且耦合度過高,而IOC的出現就是爲了解決這個問題,IOC將類與類的依賴關係寫在配置文件中,程序在運行時根據配置文件動態加載依賴的類,降低了類與類之間的耦合度。

Spring IOC實現方式:

1. 依賴查找(DL):這種方式已經被拋棄了,因爲它需要用戶自己去使用API進行查找資源和組裝對象。有侵入性。

2. 依賴注入(DI):Set注入、構造器注入、註解注入

Spring的IOC支持以下功能:

1. 依賴注入

2. 依賴檢查

3. 自動裝配

4. 支持集合

5. 指定初始化方法和銷燬方法

6. 支持回調某些方法(需要實現Spring接口,略有侵入)

 

舉例說明:

調用用戶User對象,首先來創建一個User對象實體類

public class user{
    
    private String name;
    private Integer age;
    
    //構造器
    public user(){}

    public user(String name, Integer age){
        
        super();
        this.name = name;
        this.age = age;
    }

    //set,get方法這就不寫了……
}

利用Spring來創建這個類的對象

<?xml version=“1.0” encoding=“UTF-8“?>
<beans xmlns=“http://www.springfrmework.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.xsd”>

<!—-創建user對象—->

<bean id=“u1” class=“com.xxx.user”>
    
    <!—- set注入 —->
    <!—— DI 依賴注入在創建這個對象的時候調用這個對象的屬性完成賦值—->
    <property name=“name” value=“Zhangsan”/>
    <property name=“age” value=“18”/>    


    
    <!—-構造器注入 —->
    <constructor-arg name=“name” value=“Zhangsan”/>
    <constructor-age name=“age” value=“18”/>

</bean>

</beans>

調用user對象類

public class test{
    public static void main(String[] arg){
        ApplicationContext context = new ClassPathXmlAppliactionContext(“applicationContext.xml”);
        user userObj = (user) context.getBean(“u1”);
        System.out.println(userObj);
    }
}

以上兩種講的是set注入和構造器注入,接下來講解下註解注入方式;

配置applicationContext.xml文件

<?xml version=“1.0” encoding=“UTF-8”?>

<beans xmlns=“http://www.springframework.org/schema/beans” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xmlns:context=“http://www.springframework.org/schema/context” xsi:schemaLocation=“http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd”>

<!—- 開啓自動掃描xxx.ioc包下的所有類的註解—->
<context:component-scan base-package=“Xxx.ioc”></context:component-scan>
</beans>

註解注入類

package xxx.ioc;

public interface userDao{

    public void get();
}
package xxx.ioc;

import org.springfremawork.stereotype.Component;

@Component(“userDao”)//相當於<bean id=“userDao” class=“Xxx.ioc.userDaoImpl”/>
public class userDaoImpl implements userDao{

    @Value(“張三”)
    private String name;

    public void get(){
        System.out.println(“參數是:” + name);
    }
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章