建设银行防钓鱼网站,萝岗门户网站建设,个人网站教程,建设网站要什么时候开始Java知识点总结#xff1a;想看的可以从这里进入 目录17、Spring SpEL17.1、简介17.2、配合value使用17.2.1、基本字面值17.2.2、类相关表达式17.2.3、properties17.2.4、T运算符17.2.5、new17.2.6、Elvis运算符17.2.7、运算符17.2、配合XML使用17、Spring SpEL 17.1、简介
S… Java知识点总结想看的可以从这里进入 目录17、Spring SpEL17.1、简介17.2、配合value使用17.2.1、基本字面值17.2.2、类相关表达式17.2.3、properties17.2.4、T运算符17.2.5、new17.2.6、Elvis运算符17.2.7、运算符17.2、配合XML使用17、Spring SpEL 17.1、简介
Spring3中引入了Spring表达式语言—Spring SpELSpEL表达式是一种强大简洁的装配Bean的方式支持在xml和注解中使用类似于JSP的ELJSTL表达式语言。他可以通过运行期间执行的表达式将值装配到我们的属性或构造函数当中,更可以调用JDK中提供的静态常量获取外部Properties文件中的的配置。
其实无论是XML还是注解在注入Bean或是属性时都是静态的注入那么如果Bean A中的一个成员变量的值需要参考Bean B中的成员变量的值那么这种静态的注入就有点力不从心了。所以Spring 提供了SpEL表示式来实现动态的注入。
Spring SpEL的格式为#{ SpEL expression } 。
它支持如下表达式关键字不区分大小写。
基本表达式字面量表达式、关系、逻辑与算术运算表达式、字符串连接及截取表达式、三目运算表达式、正则表达式、括号优先级表达式。类相关表达式类类型表达式、类实例化、instanceof 表达式、变量定义及引用、赋值表达式、自定义函数、对象属性存取及安全导航表达式、对象方法调用、Bean 引用集合相关表达式内联 List、内联数组、集合、字典访问、列表、字典、数组修改、集合投影、集合选择不支持多维内联数组初始化不支持内联字典定义模板表达式。
17.2、配合value使用
17.2.1、基本字面值
支持各种类型的字面值。字符串或字符类型的字面值需要使用引号包括其他类型字面值直接写。
Component
public class Student {//注入intValue(#{1})private int id;//注入StringValue(#{张三})private String name;//注入算数表达式Value(#{30-12})private int age;//注入布尔值Value(#{true})private boolean deleted;}17.2.2、类相关表达式
除字面量外还可以直接调用IOC容器中已经存在的Bean对象且可以直接调用对象的属性。也可以直接对集合进行赋值
bean iddog classcom.yu.springtest.entity.Dogproperty namename value大黄/
/beanutil:list idlistvaluejava/valuevaluepython/valuevaluec/value
/util:list//注入一个对象
Value(#{dog})
private Dog dog;//可以调用对象
Value(#{dog.name})
private String dogName;//注入集合
Value(#{list})
private ListString strings;Value(#{{1,2,3,4}})
ListInteger list;Value(#{{java,python})
ListString strings;Value(#{{1,2,3,4})
int[] ints;Value(#{{name:张三,age:13})
MapString, String map;//从集合中获取数据
Value(#{test.ints[0]})
int id;Value(#{test.map[name]})
private String name1;
17.2.3、properties
SpEl还能取出 properties文件中的数据注入到bean变量
jdbc.drivercom.mysql.cj.jdbc.Driver
jdbc.urljdbc:mysql://localhost:3306/ssmtest?useSSLfalseserverTimezoneAsia/ShanghaiallowPublicKeyRetrievaltrue
jdbc.usernameroot
jdbc.password密码util:properties加载的properties数据 util:properties iddatabase locationclasspath:database.properties/Component
public class Database {Value(#{database[jdbc.driver]})private String driver;Value(#{database[jdbc.url]})private String url;Value(#{database[jdbc.username]})private String name;Value(#{database[jdbc.password]})private String password;
}context:property-placeholder加载的properties数据 context:property-placeholder locationclasspath:database.properties/Component
public class Database {Value(${jdbc.driver})private String driver;Value(${jdbc.url})private String url;Value(${jdbc.username})private String name;Value(${jdbc.password})private String password;
}17.2.4、T运算符
T操作符可以获取表达式对象的类型, 可以调用表达式对象的静态方法如果是java.lang包下的类的对象可以省略包名。
public class Test {public static String getUserName(){return 张三;}Value(#{T(com.yu.springtest.spel.Test).getUserName()})private String name;Value(#{T(com.yu.springtest.spel.Test).userName})private String userName;}17.2.5、new
在 SpEl 中可以直接使用new 关键字来创建对象如果new的是java.lang包下的类的对象可以省略包名。
Value(#{new com.yu.springtest.entity.Dog(大黄)})
private Dog dog;17.2.6、Elvis运算符
Spring EL表达式支持Elvis运算符语法是变量?:默认值 意思是当某变量不为 null 的时候使用该变量当该变量为 null 的时候使用指定的默认值。
//如果student.name不为空则使用student.name否则使用张三
Value(#{student.name?:张三})
String username;17.2.7、运算符
表达式中支持各种运算符运算规则和Java规则类似。操作符
关系操作符, 包括: eq(), ne(!), lt(), le(), gt(), ge()逻辑运算符, 包括: and(), or(||), not(!)数学操作符, 包括: 加(), 减(-), 乘(*), 除(/), 取模(%), 幂指数(^)其他操作符, 如: 三元操作符可用于赋默认值,, instanceof、 赋值(), 正则匹配
17.2、配合XML使用
和在注解中使用类似、
bean iddog classcom.yu.springtest.entity.Dogproperty namename value大黄/
/beanutil:list idlistvaluejava/valuevaluepython/valuevaluec/value
/util:listbean idstudent classcom.yu.springtest.entity.Studentproperty namedog value#{dog}/property namedogName value#{dog.name}/property namestrings value#{list}/property namename value#{list[0]}/
/bean