1. 程式人生 > >Spring框架入門之Spring IOC(XML)& Bean工廠

Spring框架入門之Spring IOC(XML)& Bean工廠

1、Spring框架入門之Spring IOC(XML)& Bean工廠

1.1 什麼是Spring框架?

         Spring是一個開源框架,Spring是於2003年興起的一個輕量級的Java開發框架,由Rod Johnson建立。簡單來說,Spring是一個分層的JavaSE/EE full-stack(一站式)輕量級開源框架。一站式框架是指有EE開發的每一層解決方案:

  1. WEB層:SpringMVC
  2. Service層:Spring的Bean管理,Spring宣告式事務
  3. DAO層:Spring的JDBC模板,Spring的ORM模組

目前Spring有兩個版本:Spring3.X 和 Spring4.X,這裡我們將展開Spring4.X的學習。


1.2 為什麼學習Spring框架?


1.3 如何學習Spring框架?

     Spring框架下擁有9大模組,對於小白來講還是從IOC來進行入門學習的。我們可以從Spring的官網:http://spring.io/來下載spring4.X的開發包,下載並解壓後可以看到如下目錄:

在spring-framework-4.2.4.RELEASE-dist目錄下有全部的Spring檔案:

  1. docsSpring的開發文件和API
  2. libsSpring的開發jar包
  3. schema:包含Spring的各種配置檔案的約束

下面開始學習Spring 的IOC模組,加油騷年們!

 

1.3.1 什麼是IOC?

  Spring IOC就是Spring框架中底層的Core Container中的內容;IOC(inversion of control)控制反轉,是將物件的建立權反轉交給Spring來管理。在實際的開發中,如果底層的實現切換了,需要修改原始碼?大部分的Demo都是需要的,這是因為程式碼模組之間的耦合度太高,有的甚至牽一髮而動全身,顯然這樣的情景放在實際企業級開發中是非常糟糕的,為了實現不修改程式碼(低耦合性),在Spring框架中就引入了工廠

+反射+配置檔案的方法,利用工廠代理來降低程式碼模組之間的耦合性,如下圖所示:

 

1.3.2 使用Spring IOC

建立web專案並引入對應IOC支援的jar包:

 

建立介面和實現多個實現類(便於測試):

public interface UserDao{

         public void save();

}

 

public class UserDaoImpl1 implements UserDao{

         public void save()

         {

         System.out.println(“UserDaoImpl1執行了。。。”);

         }

}

public class UserDaoImpl2 implements UserDao{

         public void save()

         {

         System.out.println(“UserDaoImpl2執行了。。。”);

         }

}

 

建立applicationContext.xml檔案:

參考spring的解壓路徑下spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html來編寫applicationContext.xml檔案

 

編寫測試類:

ApplicationContext  applicationContext=new                                                                                                  ClassPathXmlApplicationContext(“applicationContext.xml”);

UserDao userDao = (UserDao)applicationContext.getBean(UserDao.class);

userDao.save( );

 

         引入Spring IOC後我們就可以通過更改applicationContext.xml檔案中Bean的配置來切換userDao.save();實際呼叫的是實現類中的具體save方法。

 

1.3.3 IOC和DI

  1. IOC:控制反轉,將物件的建立權反轉給了Spring。
    1. DI:依賴注入,前提必須有IOC的環境,Spring管理這個類的時候將類的依賴的屬性注入(設定)進來。
  2. 面向物件的時候

         依賴

        Class A{

            }

 

        Class B{

            public void xxx(A a){

               }

       }

 

繼承:is a(介面:like a)

Class A{

}

Class B extends A{

}

 

聚合:has a


1.3.4 Spring工廠類

Spring工廠類的結構圖:

由圖:      

  1. BenaFactory(老版本的工廠):在呼叫getBean()時才生成類的例項。
  2. ApplicationContext(新版本的工廠):在載入配置檔案時就將Sping管理的類例項化,ApplicationContext中有兩個實現類:
    1. ClassPathXmlApplicationContext:載入類路徑下的配置檔案
    2. FileSystemXmlApplicationContext:載入系統路徑下的配置檔案

 

1.3.5 Bean配置

<bean>標籤的id和name的配置

  1. id                 :使用了約束中的唯一約束。裡面不能出現特殊字元的。
  2. name         :沒有使用約束中的唯一約束(理論上可以出現重複的,但是實際開發不能出現的)。裡面可以出現特殊字元。
    1. Spring和Struts1框架整合的時候
    2. <bean name=”/user” class=””/>

 

   Bean的生命週期的配置(瞭解)

  1. init-method                 :Bean被初始化的時候執行的方法
  2. destroy-method        :Bean被銷燬的時候執行的方法(Bean是單例建立,工廠關閉)

 

    Bean的作用範圍的配置(重點)

  1. scope                            :Bean的作用範圍
    1. singleton          :預設的,Spring會採用單例模式建立這個物件。
    2. prototype        :多例模式。(Struts2Spring整合一定會用到)
    3. request             :應用在web專案中,Spring建立這個類以後,將這個類存入到request範圍中。
    4. session              :應用在web專案中,Spring建立這個類以後,將這個類存入到session範圍中。
    5. globalsession   :應用在web專案中,必須在porlet環境下使用。但是如果沒有這種環境,相對於session。

 

1.4 Spring的Bean管理(XML方式)

1.4.1 Spring的Bean的例項化方式(瞭解)

Bean已經都交給Spring管理,Spring建立這些類的時候,有幾種方式:

無參構造方法的方式(預設)

    編寫類

    編寫配置

 

靜態工廠例項化的方式

       編寫Bean2的靜態工廠

         配置

 

例項工廠例項化的方式

          Bean3的例項工廠

         配置

 

1.4.2 Spring的屬性注入(重點)

1.構造方法的方式的屬性注入

      1.構造方法的屬性注入

 

 2.Set方法的方式的屬性注入

         Set方法的屬性注入

           Set方法設定物件型別的屬性

     

3.P名稱空間的屬性注入(Spring2.5以後)

             通過引入p名稱空間完成屬性的注入:

  1.   寫法:
    1. 普通屬性         p:屬性名=”值”
    2. 物件屬性         p:屬性名-ref=”值”
  2.   P名稱空間的引入

  1. 使用p名稱空間

 

 4.SpEL的屬性注入(Spring3.0以後)

  1. SpEL:Spring Expression Language,Spring的表示式語言。
    1. 語法:
      1. #{SpEL}

5.集合型別屬性注入(瞭解)

配置

    <!-- Spring的集合屬性的注入============================ -->

    <!-- 注入陣列型別 -->

    <bean id="collectionBean" class="com.itheima.spring.demo5.CollectionBean">

        <!-- 陣列型別 -->

        <property name="arrs">

            <list>

                <value>王東</value>

                <value>趙洪</value>

                <value>李冠希</value>

            </list>

        </property>

       

        <!-- 注入list集合 -->

        <property name="list">

            <list>

                <value>李兵</value>

                <value>趙如何</value>

                <value>鄧鳳</value>

            </list>

        </property>

       

        <!-- 注入set集合 -->

        <property name="set">

            <set>

                <value>aaa</value>

                <value>bbb</value>

                <value>ccc</value>

            </set>

        </property>

       

        <!-- 注入Map集合 -->

        <property name="map">

            <map>

                <entry key="aaa" value="111"/>

                <entry key="bbb" value="222"/>

                <entry key="ccc" value="333"/>

            </map>

        </property>

    </bean>

 

1.5 Spring分模組開發

在載入配置檔案的時候載入多個:

ApplicationContxt  applicationContext=new                                                                                                              ClassPathXmlApplicationContext(“applicationContext.xml”,”applicationContext2.xml”);

 

在一個配置檔案中引入多個配置檔案:


                                                                                                 謝謝閱讀!     -----知飛翀