博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring 使用介绍(四)—— SpEL
阅读量:5336 次
发布时间:2019-06-15

本文共 2554 字,大约阅读时间需要 8 分钟。

一、SpEL介绍

Spring表达式语言全称为“Spring Expression Language”,缩写为“SpEL”,可在运行时构建复杂表达式

使用步骤:

1)创建解析器:ExpressionParser接口表示解析器,SpelExpressionParser提供默认实现

2)解析表达式:使用ExpressionParser.parseExpression()方法,将表达式解析为Expression对象

3)构造上下文:用于定义变量,由EvaluationContext接口表示,StandardEvaluationContext提供默认实现

4)求值:使用Expression.getValue()方法,根据上下文求得表达式值

@Testpublic void testSpel() {    // spel解析器    ExpressionParser parser = new SpelExpressionParser();        // spel语句    Expression expression1 = parser.parseExpression("895");    Assert.assertTrue(895 == expression1.getValue(int.class));        // spel语句    Expression expression2 = parser.parseExpression("'hello'");    Assert.assertTrue(StringUtils.equals("hello", expression2.getValue(String.class)));        // spel上下文    EvaluationContext context = new StandardEvaluationContext();    context.setVariable("end", "zz");    Expression expression3 = parser.parseExpression("('yy' + 'pp').concat(#end)");    Assert.assertTrue(StringUtils.equals("yyppzz", expression3.getValue(context, String.class)));}

 

二、在bean定义中使用SpEL

ApplicationContext实现默认支持SpEL,在Bean定义时注入时,使用“#{SpEL表达式}”表示

1)xml方式

@Testpublic void testSpel2() {    ApplicationContext context = new ClassPathXmlApplicationContext("spring-context.xml");    String prop = context.getBean("propBean", String.class);    Assert.assertTrue(StringUtils.equals("uouu", prop));}

2)注解方式

public class Hello {    @Value("#{str1}")    private String password;    public String getPassword() {        return password;    }}
@Testpublic void testSpel3() {    ApplicationContext context = new ClassPathXmlApplicationContext("spring-context.xml");    Hello hello = context.getBean(Hello.class);    Assert.assertTrue(StringUtils.equals("uouu", hello.getPassword()));}

 

三、属性文件的使用

spring属性文件配置方式:

jdbc1.properties
jdbc2.properties

上述配置的简写方式:

使用实例如下:

# jdbc1.properties 文件username=rootpassword=root
# jdbc2.properties 文件username=adminpassword=admin
@Testpublic void testSpel2() {    ApplicationContext context = new ClassPathXmlApplicationContext("spring-context.xml");    String prop = context.getBean("propBean", String.class);    Assert.assertTrue(StringUtils.equals("admin", prop));}

注:

1)spring使用“${属性名}”表示属性值,与SpEL使用"#{SpEL表达式}"不同

2)在多个属性文件中存在相同的属性值时,后者覆盖前者

3)支持注解方式,使用方式与SpEL注解类似,如:@Value("${password}")

 

参考:

 

转载于:https://www.cnblogs.com/MattCheng/p/8882394.html

你可能感兴趣的文章
我的PHP学习之路
查看>>
【题解】luogu p2340 奶牛会展
查看>>
对PostgreSQL的 SPI_prepare 的理解。
查看>>
解决响应式布局下兼容性的问题
查看>>
京东静态网页练习记录
查看>>
使用DBCP连接池对连接进行管理
查看>>
【洛谷】【堆+模拟】P2278 操作系统
查看>>
hdu3307 欧拉函数
查看>>
Spring Bean InitializingBean和DisposableBean实例
查看>>
Solr4.8.0源码分析(5)之查询流程分析总述
查看>>
[Windows Server]安装系统显示“缺少计算机所需的介质驱动程序”解决方案
查看>>
[容斥][dp][快速幂] Jzoj P5862 孤独
查看>>
Lucene 学习之二:数值类型的索引和范围查询分析
查看>>
软件开发工作模型
查看>>
Java基础之字符串匹配大全
查看>>
面向对象
查看>>
lintcode83- Single Number II- midium
查看>>
移动端 响应式、自适应、适配 实现方法分析(和其他基础知识拓展)
查看>>
selenium-窗口切换
查看>>
使用vue的v-model自定义 checkbox组件
查看>>