关于Spring表达式
Spring表达式
在使用Spring框架时,可以通过Spring表达式,获取另一个Bean中的某个属性的值。
假设存在ValueBean的类,会在这个类中声明一些属性,这些属性的值都来自Person类、SampleBean类中的某个的值,例如:
// 当前类中的属性都将来自Person或SampleBean中的某个属性
public class ValueBean {
// 值是Person中的username
private String username;
public String getUsername() {
return username;
}
// 由于username属性的值还是会通过SET方式注入进来,所以,需要有对应的SET方法
public void setUsername(String username) {
this.username = username;
}
}
在Spring的配置文件中,需要配置为:
<bean id="valueBean" class="cn.tedu.spring.ValueBean">
<!-- 属性值是Person对象的username的属性值 -->
<property name="username" value="#{person.username}"></property>
</bean>
其实,Spring表达式的基本格式就是使用#{}框住某个式子,如果需要获取另一个Bean中指定的属性的值,格式为:
#{Bean的id.属性的名称}
需要注意,Spring框架会根据以上表达式中的“属性名称”拼接出GET方法,并调用该GET方法以获取值。例如以上配置的是#{person.username},则Spring就会拼出getUsername这个名称,并调用getUsername()方法,所以,对应的Person类必须有getUsername()方法。
使用Spring表达式时,还可以获取另一个类的集合属性中的某一个元素。例如:
// 值是SampleBean的names中的第3个
private String name;
则配置为:
<!-- 属性值是SampleBean对象中的names(List类型)中的第3个值 -->
<property name="name" value="#{sampleBean.names[2]}"/>
所以,如果要访问的是List集合中的某个值,Spring表达式的语法是:
#{Bean的id.List集合的属性名[索引位置]}
如果要获取数组中的某个元素,也可以使用以上语法 ,由于Spring在管理Set时使用的实现类是LinkedHashSet,所以,也可以使用以上语法获取Set集合中的某个元素。
如果需要获取Map或Properties类型的数据中的某个元素,例如:
// 值是SampleBean的profile中的gender
private String gender;
// 值是SampleBean的session中的password
private String password;
则需要配置为:
<!-- 属性值是SampleBean对象中的profile(Properties类型)中的gender的值 -->
<property name="gender" value="#{sampleBean.profile.gender}"/>
<!-- 属性值是SampleBean对象中的session(Map类型)中的password的值 -->
<property name="password" value="#{sampleBean.session.password}"/>
也就是说,获取Map或Properties类型中的值时,Spring表达式的语法是:
#{Bean的id.Map或Properties类型数据的名称.Map的Key或Properties的属性名}
另外,还可以写成:
#{Bean的id.Map或Properties类型数据的名称['Map的Key或Properties的属性名']}
例如:
<!-- 属性值是SampleBean对象中的session(Map类型)中的password的值 -->
<property name="password" value="#{sampleBean.session['password']}"/>

浙公网安备 33010602011771号