• spring之spring表达式语言:SpEL


    (1)spring表达式语言是一个支持运行时查询和操作对象的表达式语言。

    (2)语言类似于EL:SpEL使用#{...}作为定界符。所有在大括号中的字符串均被认为是SpEL。

    (3)SpEL为bean的属性进行动态赋值提供了便利。

    (4)通过SpEL可以实现:

    • 通过Bean的id对Bean进行引用
    • 调用方法及引用对象的属性
    • 计算表达式的值
    • 正则表达式匹配

    字面量的表示:

    • 整型:#{5}
    • 小数:#{3.45}
    • 科学计数法:#[1e4]
    • 字符串:可以使用单引号或双引号早味字符串的定界符:#{'tom'},#{"tom"}
    • 布尔值:#{false}

    SpEL支持的运算符号:+ - * / % ^ < > == <= >= lt gt eq le ge and or not | (?:) if-else 正则表达式等等

    调用静态属性和方法:通过T()

    以下代码均忽略类中的getter、setter和to_string方法。

    Car.java

    package com.gong.spring.beans.spel;
    
    public class Car {
        
        public Car() {
        }
    
        public Car(String name) {
            this.name = name;
        }
        private String name;
        //轮胎周长
        private double tyrePerimeter;
        private double price;
    }

    Address.java

    package com.gong.spring.beans.spel;
    
    public class Address {
        private String city;
        private String street;
    }

    Student.java

    package com.gong.spring.beans.spel;
    
    public class Student {
        
        private String name;
        private int age;
        private double score;
        private String city;
        private String info;
        private Car car;
        private Address address;
    }

    beans-spel.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:p="http://www.springframework.org/schema/p"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <bean id="car" class="com.gong.spring.beans.spel.Car" p:name="baoma"
       p:tyrePerimeter="#{T(java.lang.Math).PI*80}"></bean> <bean id="address" class="com.gong.spring.beans.spel.Address" p:city="武汉" p:street="#{'络南街道'}"></bean> <bean id="student" class="com.gong.spring.beans.spel.Student" p:name="tom" p:age="#{12}" p:score="#{99.00}"> <!-- 使用spel引用其它的bean --> <property name="car" value="#{car}"></property> <!-- 使用spel引用其它bean的属性 --> <property name="city" value="#{address.city}"></property> <!-- 使用spel运算符 ,进行动态赋值--> <property name="info" value="#{car.price >300000 ? '有钱' : '没钱'}"></property> </bean> </beans>

    Main.java

    package com.gong.spring.beans.spel;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class Main {
        public static void main(String[] args) {
            //1.创建spring的IOC容器对象
            ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-spel.xml");
            //2.从容器中获取Bean实例
            Student student = (Student) ctx.getBean("student");
            System.out.println(student.toString());
        }
    }

    部分输出:

  • 相关阅读:
    CF1442E. Black, White and Grey Tree
    CF1442D. Sum
    CF1444D. Rectangular Polyline
    arc107F
    外心与垂心关系
    CF1434E. A Convex Game
    CF1434D. Roads and Ramen
    arc106E
    arc106F
    CF704E. Iron Man
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12152800.html
Copyright © 2020-2023  润新知