spring基礎(1:基本概念)
阿新 • • 發佈:2018-08-06
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
最簡單
<bean id="bean1" class="com.example.Class"/>
帶構造器
<bean id="bean1" class="com.example.Class"> <contructor-arg value="12"/> //基本數據類型使用value <contructor-arg ref="bean2"/> //對象使用ref </bean>
通過工廠方法創建
如果想聲明的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
? 當實例化需要執行初始化操作,或者銷毀時需要執行清理工作。兩種實現方式:
xml配置,類中編寫初始化方法和銷毀方法,在bean中定義。
<bean id="bean4" class="com.example.Class" init-method="start" destroy-method="destroy"/>
也可在Beans中定義默認初始化和銷毀方法。
<beans . . . default-init-method="" default-destroy-method=""/>
實現
InitializingBean
和DisposableBean
接口
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:基本概念)