Spring表达式语言:SpEL

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

--语言类似于EL:SpEL使用#{...}作为定界符,所有在大框中的字符都可以认为是SpEL。

--SpEL为Bean的属性进行动态赋值提供了便利。

--通过SpEL可以实现:

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

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

  -计算表达式的值

  -正则表达式的匹配

实例:

三个类:Address,Car,Person

Address:

 

package com.xia.SpEL;

public class Address {
    private String city;
    private String street;
    
    public Address() {
        super();
        // TODO Auto-generated constructor stub
    }

    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.xia.SpEL;

public class Car {
    private String cname;
    private double price;
    private double bring;  //半径
    public double getBring() {
        return bring;
    }


    public void setBring(double bring) {
        this.bring = bring;
    }


    public Car(String cname, double price) {
        super();
        this.cname = cname;
        this.price = price;
    }
    


    @Override
    public String toString() {
        return "Car [cname=" + cname + ", price=" + price + ", bring=" + bring + "]";
    }


    public Car() {
        super();
    }
    
    public String getCname() {
        return cname;
    }
    public void setCname(String cname) {
        this.cname = cname;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    
    
    
}    

Person:

package com.xia.SpEL;

public class Person {
    private String name;
    private Car car;
    private String city;  //用于引用Address bean中的city属性
    private String info;    //用于判断Car bean中的price,500000>price>300000

    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;
    }

    public Car getCar() {
        return car;
    }
    
    public void setCar(Car car) {
        this.car = car;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", car=" + car + ", city=" + city + ", info=" + info + "]";
    }
}

配置文件:

    <bean id="address" class="com.xia.SpEL.Address">
        <!-- 使用spel表达式为属性一个子面值 -->
        <property name="city" value="#{'Beijing'}"></property>
        <property name="street" value="wudaokoou"></property>
    </bean>

    <bean id="car" class="com.xia.SpEL.Car">
        <property name="cname" value="Audi" />
        <property name="price" value="500000"></property>
        <!-- 使用SpEL 引用类的静态属性 -->
        <property name="bring" value="#{T(java.lang.Math).PI * 80}"></property>
    </bean>

    <bean id="person" class="com.xia.SpEL.Person">
        <!-- 使用SpEL来引用其他的bean -->
        <property name="car" value="#{car}"></property>
        <property name="city" value="#{address.city}"></property>
        <!-- 在SpEL中使用运算符 -->
        <property name="info" value="#{car.price > 3000000 ? '金领':'白领'}"></property>
        <property name="name" value="Tom"></property>
    </bean>

输出:

Address [city=Beijing, street=wudaokoou]
Car [cname=Audi, price=500000.0, bring=251.32741228718345]
Person [name=Tom, car=Car [cname=Audi, price=500000.0, bring=251.32741228718345], city=Beijing, info=白领]

 

posted @ 2016-10-02 17:54  夏文杰  阅读(249)  评论(0)    收藏  举报