zoukankan      html  css  js  c++  java
  • 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());
        }
    }

    部分输出:

  • 相关阅读:
    命令拷屏之网络工具
    PHP 设计模式 笔记与总结(1)命名空间 与 类的自动载入
    Java实现 计蒜客 1251 仙岛求药
    Java实现 计蒜客 1251 仙岛求药
    Java实现 计蒜客 1251 仙岛求药
    Java实现 蓝桥杯 算法训练 字符串合并
    Java实现 蓝桥杯 算法训练 字符串合并
    Java实现 蓝桥杯 算法训练 字符串合并
    Java实现 LeetCode 143 重排链表
    Java实现 LeetCode 143 重排链表
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12152800.html
Copyright © 2011-2022 走看看