关于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集合中的某个元素。

如果需要获取MapProperties类型的数据中的某个元素,例如:

// 值是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}"/>

也就是说,获取MapProperties类型中的值时,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']}"/>
posted @   Charles博客  阅读(127)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示