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配置标签