关于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']}"/>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效