Spring表达式语言(SpEL)能够以一种强大和简洁的方式将值装配到bean属性和构造器参数中,在这个过程中所使用的表达式会在运行时计算得到。(之前的属性占位符需要在属性文件中硬编码)
SpEL表达式要放到 “#{…}”中。属性占位符要放到 “${…}”中。
1、字面值
public class Student {
//也不需要setter方法
//可以注入整形、字符型、boolean、
@Value("#{23}")
private int age;
//String类型的字面量可以使用单引号或双引号
@Value("#{'hhhodde'}")
private String name;
}
xml中的配置
//不需要context:property-placeholder
<bean id="student" class="org.springaction.Student"/>
上面的这些字面量都是在java里设置的,也可以直接在xml中利用property属性或constructor-arg设置:
<bean id="student" class="org.springaction.Student">
//需要有setter方法
<property name="password" value="#{'3232'}"/>
</bean>
2、引用Beam、Properties和方法
2.1、通过ID引用其他的Bean
<bean id="student" class="org.springaction.Student">
//需要Setter方法
//等价于<property name="teacher" ref="teacher"/>
<property name="teacher" value="#{teacher}"/>
</bean>
<bean id="teacher" class="org.springaction.Teacher"/>
2.2、获取Bean中的属性
<bean id="student" class="org.springaction.Student">
<!--引用teacher Bean的属性address,将其值注入到student Bean的属性teachAddress中-->
<property name="teachAddress" value="#{teacher.address}"/>
</bean>
<bean id="teacher" class="org.springaction.Teacher">
<property name="address" value="chian hook"/>
</bean>
2.3、获取Bean中的方法
<bean id="student" class="org.springaction.Student">
<!--会调用teacher Bean中的方法newTeam(),将方法的返回值作为值注入-->
<property name="theOne" value="#{teacher.newTeam()}"/>
</bean>
3、操作类
在SpEL中,T()运算符的结果是一个Class对象,它可以被用来访问对象的静态方法和常量。
@Value("#{T(java.lang.Math).PI}")
private int age;
4、SpEL运算符
用来操作表达式值的运算符包括:
@Value("#{2*T(java.lang.Math).PI+3232}")
private int age;