spring-基於XML的IOC配置

0912spring-基於XML的IOC配置

1)applicationContext的三個常用實現類及由接口引發的問題

 /**
     * 獲取spring的Ioc核心容器,並根據id獲取對象
     *
     * ApplicationContext的三個常用實現類:
     *      ClassPathXmlApplicationContext:它可以加載類路徑下的配置文件,要求配置文件必須在類路徑下。不在的話,加載不了。(更常用)
     *      FileSystemXmlApplicationContext:它可以加載磁盤任意路徑下的配置文件(必須有訪問權限)
     *
     *      AnnotationConfigApplicationContext:它是用於讀取註解創建容器的,是明天的內容。
     *
     * 核心容器的兩個接口引發出的問題:
     *  ApplicationContext:     單例對象適用              採用此接口
     *      它在構建核心容器時,創建對象採取的策略是採用立即加載的方式。也就是說,只要一讀取完配置文件馬上就創建配置文件中配置的對象。
     *
     *  BeanFactory:            多例對象使用
     *      它在構建核心容器時,創建對象採取的策略是採用延遲加載的方式。也就是說,什麼時候根據id獲取對象了,什麼時候才真正的創建對象。
     * @param args
     */

2)創建Bean的三種方式

<!-- 第一種方式:使用默認構造函數創建。
            在spring的配置文件中使用bean標籤,配以id和class屬性之後,且沒有其他屬性和標籤時。
            採用的就是默認構造函數創建bean對象,此時如果類中沒有默認構造函數,則對象無法創建。

    <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"></bean>
    -->

    <!-- 第二種方式: 使用普通工廠中的方法創建對象(使用某個類中的方法創建對象,並存入spring容器)
    <bean id="instanceFactory" class="com.itheima.factory.InstanceFactory"></bean>
    <bean id="accountService" factory-bean="instanceFactory" factory-method="getAccountService"></bean>
    -->

    <!-- 第三種方式:使用工廠中的靜態方法創建對象(使用某個類中的靜態方法創建對象,並存入spring容器)
    <bean id="accountService" class="com.itheima.factory.StaticFactory" factory-method="getAccountService"></bean>
    -->

    <!-- bean的作用範圍調整
        bean標籤的scope屬性:
            作用:用於指定bean的作用範圍
            取值: 常用的就是單例的和多例的
                singleton:單例的(默認值)
                prototype:多例的
                request:作用於web應用的請求範圍
                session:作用於web應用的會話範圍
                global-session:作用於集羣環境的會話範圍(全局會話範圍),當不是集羣環境時,它就是session

    <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl" scope="prototype"></bean>
    -->
    ## 3)bean對象的作用範圍和生命週期

```java
<!-- bean的作用範圍調整
        bean標籤的scope屬性:
            作用:用於指定bean的作用範圍
            取值: 常用的就是單例的和多例的
                singleton:單例的(默認值)
                prototype:多例的
                request:作用於web應用的請求範圍
                session:作用於web應用的會話範圍
                global-session:作用於集羣環境的會話範圍(全局會話範圍),當不是集羣環境時,它就是session

    <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl" scope="prototype"></bean>
    -->
<!-- bean對象的生命週期
            單例對象
                出生:當容器創建時對象出生
                活着:只要容器還在,對象一直活着
                死亡:容器銷燬,對象消亡
                總結:單例對象的生命週期和容器相同
            多例對象
                出生:當我們使用對象時spring框架爲我們創建
                活着:對象只要是在使用過程中就一直活着。
                死亡:當對象長時間不用,且沒有別的對象引用時,由Java的垃圾回收器回收
     -->

3)bean對象的作用範圍和生命週期

<!-- bean的作用範圍調整
        bean標籤的scope屬性:
            作用:用於指定bean的作用範圍
            取值: 常用的就是單例的和多例的
                singleton:單例的(默認值)
                prototype:多例的
                request:作用於web應用的請求範圍
                session:作用於web應用的會話範圍
                global-session:作用於集羣環境的會話範圍(全局會話範圍),當不是集羣環境時,它就是session

    <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl" scope="prototype"></bean>
    -->
<!-- bean對象的生命週期
            單例對象
                出生:當容器創建時對象出生
                活着:只要容器還在,對象一直活着
                死亡:容器銷燬,對象消亡
                總結:單例對象的生命週期和容器相同
            多例對象
                出生:當我們使用對象時spring框架爲我們創建
                活着:對象只要是在使用過程中就一直活着。
                死亡:當對象長時間不用,且沒有別的對象引用時,由Java的垃圾回收器回收
     -->

4)spring的依賴注入

 <!-- spring中的依賴注入
        依賴注入:
            Dependency Injection
        IOC的作用:
            降低程序間的耦合(依賴關係)
        依賴關係的管理:
            以後都交給spring來維護
        在當前類需要用到其他類的對象,由spring爲我們提供,我們只需要在配置文件中說明
        依賴關係的維護:
            就稱之爲依賴注入。
         依賴注入:
            能注入的數據:有三類
                基本類型和String
                其他bean類型(在配置文件中或者註解配置過的bean)
                複雜類型/集合類型
             注入的方式:有三種
                第一種:使用構造函數提供
                第二種:使用set方法提供
                第三種:使用註解提供(明天的內容)
     -->


    <!--構造函數注入:
        使用的標籤:constructor-arg
        標籤出現的位置:bean標籤的內部
        標籤中的屬性
            type:用於指定要注入的數據的數據類型,該數據類型也是構造函數中某個或某些參數的類型
            index:用於指定要注入的數據給構造函數中指定索引位置的參數賦值。索引的位置是從0開始
            name:用於指定給構造函數中指定名稱的參數賦值 常用的
          ~~~~~~以上三個用於指定給構造函數中哪個參數賦值~~~~~~
            value:用於提供基本類型和String類型的數據
            ref:用於指定其他的bean類型數據。它指的就是在spring的Ioc核心容器中出現過的bean對象

        優勢:
            在獲取bean對象時,注入數據是必須的操作,否則對象無法創建成功。
        弊端:
            改變了bean對象的實例化方式,使我們在創建對象時,如果用不到這些數據,也必須提供。
    -->
     <!-- set方法注入                更常用的方式
        涉及的標籤:property
        出現的位置:bean標籤的內部
        標籤的屬性
            name:用於指定注入時所調用的set方法名稱
            value:用於提供基本類型和String類型的數據
            ref:用於指定其他的bean類型數據。它指的就是在spring的Ioc核心容器中出現過的bean對象
        優勢:
            創建對象時沒有明確的限制,可以直接使用默認構造函數
        弊端:
            如果有某個成員必須有值,則獲取對象是有可能set方法沒有執行。
    -->
    <!-- 複雜類型的注入/集合類型的注入
        用於給List結構集合注入的標籤:
            list array set
        用於個Map結構集合注入的標籤:
            map  props
        結構相同,標籤可以互換
    -->
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章