spel总结
背景:在Spring Boot 中经常通过#{}
或者${}
这两种方式挂到属性上面进行获取内容,但是又经常获取不到,现在来仔细了解一下这两个的区别。
Spel表达式
例子
spel 表达式(Spring Expression Language),这种方式是通过#{…},进行获取,里面是spel表达式
下面通过一些例子进行了解下
通过Spring Boot 进行启动
@RestController(value = "controllerTest")
public class RestControllerTest {
private Log log = LogFactory.getLog(RestControllerTest.class);
@Bean(value = "userInfo")
public UserInfo getUserInfo(){
return new UserInfo(1l,"spring 爸爸");
}
@Value("#{userInfo.name}")
public String father;
@Value("#{'my name is spring '}")
public String name;
// 此处创建对象要写上包名+类名,否则会报错
@Value("#{new java.util.Date()}")
public Date date;
@Value("#{20}")
public Integer age;
@Value("#{1}")
public Integer sexValue;
@Value("#{controllerTest.sexValue==1?'男':'女'}")
public String sex;
// controllerTest.age 这里代表 当前bean的名称加上属性就可以直接获取
@Value("#{controllerTest.age>18?'成年':'未成年'}")
public String remark;
@Value("#{controllerTest.age>18 && controllerTest.sexValue==1?'可以':'不可以'}")
public String goKTV;
@Value("#{1 lt 2}")
public Boolean a;
@GetMapping("/start")
public String aa(){
log.info(name);
log.info("我的父亲是"+father);
log.info("当前时间是"+date);
log.info("我今年"+age+"岁");
log.info("我今年"+remark);
log.info("我"+goKTV+"KTV唱歌");
log.info(a);
return "hello spring boot";
}
}
public class UserInfo {
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public UserInfo(Long id, String name) {
this.id = id;
this.name = name;
}
}
输出内容:
my name is spring
我的父亲是spring 爸爸
当前时间是Sun Sep 01 17:43:29 CST 2019
我今年20岁
我今年成年
我可以KTV唱歌
true
运算符类型 | 运算符 | 例子 |
---|---|---|
算术运算 | +、-、*、/、%、^ | 1+1、2^3、 |
比较运算 | <、>、==、<=、>= 、lt、 gt、 eq 、le 、ge | 1 lt 2 |
条件运算 | ?:(ternary) 、?:(Elvis) | 三元运算符 A?true : false |
逻辑运算 | and、or、not、| | A and B |
正则表达式 | matches | #{email matches ‘[a-zA-Z0-9._%±]+@[a-zA-Z0-9.-]+\.com’} |
类型判断 | instanceof | ‘xyz’ instanceof T(int) |