1. 程式人生 > >spring基礎(1:基本概念)

spring基礎(1:基本概念)

poj 操作 共享問題 元素 組成 The 開發 let 可選值

本系列筆記來自對《Spring實戰》第三版的整理,Spring版本為3.0


??spring是為了解決企業級應用開發的復雜性而創建的,spring最根本的使命是:簡化Java開發。為降低開發復雜性有以下四種關鍵策略。

  • 基於POJO的輕量級和最小侵入性編程
  • 通過依賴註入和面向接口實現松耦合
  • 基於切面和慣例進行聲明式編程
  • 通過切面和模板減少樣板式代碼

1.依賴註入

???假設類A依賴類B,通常做法是在類A中聲明類B,然後使用,這樣一方面具有極高的耦合性,將類A與類B綁定在一起;另一方面也讓單元測試變得很困難,無法在A外部獲得B的執行情況。

???通過依賴註入,對象的依賴管理將不用對象本身來管理,將由一個第三方組件在創建對象時設定,依賴關系將被自動註入到對應的對象中去。

2.創建應用上下文

  • ClassPathXmlApplicationContext()從類路徑創建
  • FileSystemXmlApplicationContext()讀取文件系統下的xml配置
  • XmlWebApplicationContext() 讀取web應用下的XML配置文件並裝載上下文定義

3.聲明Bean

  1. 最簡單

    <bean id="bean1" class="com.example.Class"/>

  2. 帶構造器

    <bean id="bean1" class="com.example.Class">
        <contructor-arg value="12"/>   //基本數據類型使用value
        <contructor-arg ref="bean2"/>  //對象使用ref
    </bean>
  3. 通過工廠方法創建

    如果想聲明的Bean沒有一個公開的構造函數,通過factory-method屬性來裝配工廠生產的Bean

    <bean id="bean1" class="com.example.class" factory-method="getInstance"/>//getInstance為獲取實例的靜態方法。

4.Bean的作用域

? 所有Spring Bean默認都是單例的。通過配置scope屬性為prototype可每次請求產生一個新的實例。

<bean id="bean3" class="com.example.class" scope="prototype">

scope可選值:

  • singleton:每個容器中,一個Bean對象只有一個實例。(默認
  • prototype:允許實例化任意次 ,每次請求都會創建新的
  • request:作用域為一次http請求
  • session:作用域為一個http session會話
  • global-session:作用域為一個全局http session,僅在Protlet上下文中有效

5.初始化和銷毀Bean

? 當實例化需要執行初始化操作,或者銷毀時需要執行清理工作。兩種實現方式:

  1. xml配置,類中編寫初始化方法和銷毀方法,在bean中定義。

    <bean id="bean4" class="com.example.Class" init-method="start" destroy-method="destroy"/>

    也可在Beans中定義默認初始化和銷毀方法。

    <beans . . . default-init-method="" default-destroy-method=""/>
  2. 實現InitializingBeanDisposableBean接口

6.setter註入

? 在bean中使用<property>元素配置屬性,使用方法類似於<constructor-arg>

<property name="name" value="fxg"/> //註入基本數據類型
<property name="sex" ref="sex"/>  //註入類
可使用p簡寫,**-ref**後綴說明裝配的是一個引用
<bean id="bean5" class="com.example.class" 
                p:name="fxb" 
                p:sex-ref="sex"/>

7.註入內部Bean

? 既定義其他Bean內部的Bean,避免共享問題,可在屬性節點或者構造器參數節點上使用。

<property name="sex">
    <bean class="com.example.sex"/>  //沒有id屬性,因為不會被其他bean使用
</property>
<constructor-arg>
    <bean class="com.example.sex"/>
</constructor-arg>

8.裝配集合

集合元素 用途
<list> 裝配list類型,允許重復
<set> set,不能重復
<map> map類型
<props> properties類型,鍵值都為String
  • list

    <property name="instruments">
      <list>
        <ref bean="guitar"/>
        <ref bean="cymbal"/>
        <ref bean="harmonica"/>
      </list>
    </property>
    <ref>用來定義上下文中的其他引用,還可使用<value>,<bean>,<null/>
  • set

    <set>
      <ref bean="fasdf"/>
    </set>

    用法和list相同,只是不能重復

  • Map

    <map>
        <entry key="GUITAR" value-ref="guitar"/>
    </map>

    entry元素由一個key,一個value組成,分別有兩種形式。

    key 鍵為String
    key-ref 鍵為Bean的引用
    value 值為String
    value-ref 值為Bean的引用
  • props

    <props>
      <prop key="GUITAR">guitar</prop>
    </props>

    鍵值都是String

9.裝配空值

<property name="name"><null/></property>

spring基礎(1:基本概念)