sple表达式_Spring框架:表达式语言SpEL

•Spring表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言。

•语法类似于 EL:SpEL 使用#{…}作为定界符,所有在大框号中的字符都将被认为是SpEL

•SpEL 为bean的属性进行动态赋值提供了便利

•通过SpEL 可以实现:

–通过bean的id对bean进行引用

–调用方法以及引用对象中的属性

–计算表达式的值

正则表达式的匹配

字面量的表示

–整数:

–小数:

–科学计数法:

–String可以使用单引号或者双引号作为字符串的定界符号

–Boolean

引用其他对象

通过value属性和SpEL配置Bean之间的应用关系

引用其他对象的属性

调用其他方法,还可以链式操作

方法的连接

value="#{seqenceGenerator2.toString().toUpperCase()}"/>

SpEL支持的运算符号

•算数运算符:+, -, *, /, %,^:

•加号还可以用作字符串连接:

•比较运算符:, ==, <=, >=,lt,gt,eq, le,ge

•逻辑运算符号:and, or, not,|

•if-else运算符:?: (ternary), ?: (Elvis)

•if-else的变体

•正则表达式:matches

•调用静态方法或静态属性:通过T()调用一个类的静态方法,它将返回一个Class Object,然后再调用相应的方法或属性:

举个例子

新建一个包,名为com.yorkmass.spring.beans.spel

新建3个类:Address、Car、Person类,一个主类Main

Address类:

package com.yorkmass.spring.beans.spel;

public class Address {

private String street;

private String city;

public String getCity() {

return city;

}

public void setCity(String city) {

this.city = city;

}

public String getStreet() {

return street;

}

public void setStreet(String street) {

this.street = street;

}

@Override

public String toString() {

return "Address [city=" + city + ", street=" + street + "]";

}

}

Car类:

package com.yorkmass.spring.beans.spel;

public class Car {

private String brand;

private double price;

private double tyrePerimeter;//轮胎的周长

public double getTyrePerimeter() {

return tyrePerimeter;

}

public void setTyrePerimeter(double tyrePerimeter) {

this.tyrePerimeter = tyrePerimeter;

}

public String getBrand() {

return brand;

}

public void setBrand(String brand) {

this.brand = brand;

}

public double getPrice() {

return price;

}

public void setPrice(double price) {

this.price = price;

}

@Override

public String toString() {

return "Car [brand=" + brand + ", price=" + price + ", tyrePerimeter=" + tyrePerimeter + "]";

}

public Car(){

System.out.println("Car's constructor");

}

}

Person类:

package com.yorkmass.spring.beans.spel;

public class Person {

private String name;

private Car car;

private String city;

//引用address bean 的city属性

private String info;

//根据car的price确定info:car的price>=300000:金领

//否则为:白领

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Car getCar() {

return car;

}

public void setCar(Car car) {

this.car = car;

}

public String getCity() {

return city;

}

public void setCity(String city) {

this.city = city;

}

public String getInfo() {

return info;

}

public void setInfo(String info) {

this.info = info;

}

@Override

public String toString() {

return "Person [name=" + name + ", car=" + car + ", city=" + city + ", info=" + info + "]";

}

}

新建xml配置文件,命名为:beans-spel.xml

bean-spel.xml代码:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

Main类:

package com.yorkmass.spring.beans.spel;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

public static void main(String[] args) {

// TODO Auto-generated method stub

ApplicationContext ctx=new ClassPathXmlApplicationContext("beans-spel.xml");

Address address=(Address)ctx.getBean("address");

System.out.println(address);

Car car=(Car)ctx.getBean("car");

System.out.println(car);

Person person=(Person)ctx.getBean("person");

System.out.println(person);

}

}

程序输出结果:

一月 16, 2019 4:41:22 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh

信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@176fe71: startup date [Wed Jan 16 16:41:22 CST 2019]; root of context hierarchy

一月 16, 2019 4:41:22 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions

信息: Loading XML bean definitions from class path resource [beans-spel.xml]

Car's constructor

Address [city=beijing, street=wudaokou]

Car [brand=audi, price=500000.0, tyrePerimeter=251.32741228718345]

Person [name=Tom, car=Car [brand=audi, price=500000.0, tyrePerimeter=251.32741228718345], city=beijing, info=金领]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值