Bean相關
使用構造函數注入
<constructor-arg value="基本參數值" />
<constructor-arg ref="其他bean的id" />
Bean的生存範圍
singleton(默認) |
|
prototype |
每次使用new一個實例 |
request |
HTTP request範圍 |
session |
HTTP session |
global-session |
global HTTP session |
初始化和銷燬bean時的附加操作方法
init-method="方法名"
destroy-method="方法名"
這兩個屬性也可加在beans標籤中表示內部所有bean在啓動和銷燬時都會執行這些方法
使用setter注入bean的屬性
<property name="屬性名稱" value="屬性值" / >
注入時spring能對屬性值根據屬性變量類型做自動類型轉換
裝配引用其他bean
<property name="..."ref="其他bean的id"/>
注入inner beans
將inner bean寫在property或constructor-arg內,不需要id
使用spring的p名字空間裝配bean
p:屬性名 = "屬性值"
p:屬性名-ref = "其他beanid"
裝配集合類
spring支持四種標籤
<list> |
允許重複 |
<set> |
保證不重複 |
<map> |
鍵值可以是任何類型 |
<props> |
鍵值必須是String |
list
<property name="...">
<list>
<ref bean=".."/>
<ref bean=".."/>
...
list
<property name="...">
<set>
<ref bean=".."/>
<ref bean=".."/>
...
map
<property name="...">
<map>
<entry key=".." value-ref=".."/>
<entry key=".." value-ref=".."/>
...
key, key-ref, value, value-ref的區別
prop
<property name="...">
<props>
<prop key="..">.....</prop>
<prop key="..">.....</prop>
...
不裝配任何(null)
<prop key=".."><null/></prop>
用表達式(SpEL)做關聯
<property name="..."value="....#{ 表達式 }....."/>
字面量
#{5}, #{45.20}, #{1e4}, #{true}等
裝配其他bean
value="#{其他beanid}"相當於 ref="其他beanid"
裝配其他bean的屬性,或方法
value="#{beanid.beanattribute}"
value="#{beanid.beanattribute.beanmethod()}"
防止beanattribute是null而包NullPointerException的方法
value="#{beanid.beanattribute?.beanmethod()}"
T(類完全名)表示這個類,例如訪問Math常量或靜態方法:
value="#{T(java.lang.Math).PI}"
value="#{T(java.lang.Math).random()}"
SpEL的運算符
比較特殊的幾個:
關係lt, gt, eq, le, ge
邏輯and, or, not, |
正則matches
<util:list>標籤來源於spring的util名字空間,表示創建java.util.List對象
[]可以訪問集合成員,如
value="#{cities[2]}"
value="#{cities['Dallas']}"
獲得環境變量
value="#{systemProperties['application.home']}"
條件選擇集合類,例如選擇人口屬性大於100000的城市
value="#{cities.?[population gt 100000]}"
.^[] |
選擇第一個元素 |
.$[] |
選擇最後一個元素 |
.![x] |
只返回集合中的所有x屬性(也是作爲集合返回) |
自動裝配的四種類型:
通過名稱,通過類型,通過構造器,自動探測
bean標籤的primary屬性,autowire-candidate屬性,default-autowire屬性
在java代碼中使用註釋定義自動裝配
<context:annotation-config />
使用Spring的基於java的配置
面向切面的Spring
Spring支持5種advice,所謂advice就是aspects的目的,advice穿插在程序運行的一系列joint-point中執行,即所謂aspects-oriented-programming
before |
被adviced的方法執行前 |
after |
被adviced的方法執行後,不管成功與否 |
after-returning |
被adviced的方法成功完成後執行 |
after-throwing |
被adviced的方法拋出異常時執行 |
around |
|
Spring的AOP支持
spring的advice是用java寫的
spring只支持方法級別的joint points
spring的AOP配置標籤