1、SpEL
1.1、简介
Spring Expression Language,Spring表达式语言,简称SpEL。支持运行时查询并可以操作对象图。
和JSP页面上的EL表达式、Struts2中用到的OGNL表达式一样,SpEL根据JavaBean风格的getXxx()、setXxx()方法定义的属性访问对象图,完全符合我们熟悉的操作习惯。
Spring3中引入了Spring表达式语言—SpringEL,SpEL是一种强大,简洁的装配Bean的方式,他可以通过运行期间执行的表达式将值装配到我们的属性或构造函数当中,更可以调用JDK中提供的静态常量,获取外部Properties文件中的的配置 为什么要使用SpringEL? 我们平常通过配置文件或Annotaton注入的Bean,其实都可以称为静态性注入,试想一下,若然我Bean A中有变量A,它的值需要根据Bean B的B变量为参考,在这场景下静态注入就对这样的处理显得非常无力,而Spring3增加的SpringEL就可以完全满足这种需求,而且还可以对不同Bean的字段进行计算再进行赋值,功能非常强大
如何使用SpringEL?
SpringEL从名字来看就能看出,和EL是有点关系的,SpringEL的使用和EL表达式的使用非常相似,EL表达式在JSP页面更方便的获取后台中的值,而SpringEL就是为了更方便获取Spring容器中的Bean的值,EL使用${},而SpringEL使用#{}进行表达式的声明
1.2、基本语法
SpEL使用#{…}作为定界符,所有在大框号中的字符都将被认为是SpEL表达式。
使用SpringEL注入简单值
public class El{
/**
* @Value注解相当于xml中的<property>标签
* SpringEl同样支持在xml中<property>中编写
*/
@Value("#{5}")//注入简单的值,输出为5
private int num;
//注入id为testConstant的Bean
@Value("#{tsetConstant}")
private TestConstant constant;
//注入id为testConstant bean中的str常量/变量
@Value("#{testConstant.str}")
private String str;
}
使用SpringEL调用方法
public class TestSpringEL {
/*
* TestConstant类中有两个方法重载,
* 返回值为String类型
*/
// 调用无参方法
@Value("#{testConstant.showProperty}")
private String method1;
// 有参接收字符串的方法
@Value("#{testConstant.showProperty('Hello')}")
private String method2;
/*
* 若然希望方法返回的String为大写
*/
@Value("#{testConstant.showProperty().toUpperCase()}")
private String method3;
/*
* 若使用method3这种方式,若然showProperty返回为null,
* 将会抛出NullPointerException,可以使用以下方式避免
*/
@Value("#{testConstant.showProperty()?.toUpperCase}")
private String method4;
/*
* 使用?.符号代表若然左边的值为null,将不执行右边方法,
* 读者可以灵活运用在其他场景,只要左边可能返回null,
* 即可使用上面示例中的?.
*/
}
SpringEL调用静态类或常量
public class TestSpringEL {
/*
* 注入JDK中的工具类常量或调用工具类的方法
*/
// 获取Math的PI常量
@Value("#{T(java.lang.Math).PI&#