18 Spring EL运算符实例

作者: 笑Skr人啊 | 来源:发表于2017-08-21 16:21 被阅读3次

    Spring EL支持大多数标准的数学,逻辑和关系运算符。 例如,

    • 关系运算符 : 等于 (==, eq), 不等于 (!=, ne), 小于 (<, lt), 小于或等于 (<= , le), 大于 (>, gt), 和大于或等于 (>=, ge).
    • 逻辑运算符 : 且, 或, 非 (!).
    • 数学运算符 : 加法(+), 减法 (-), 乘法 (*), 除法(/), 除模(%) 和指数幂 (^).
    Spring EL以注解的形式

    这个例子说明了如何在 SpEL 中使用运算符。

    package com.gp6.el.operator;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    @Component("customerBean")
    public class Customer {
    
        @Value("#{1 == 1}") //true
        private boolean testEqual;
        
        @Value("#{1 != 1}") //false
        private boolean testNotEqual;
        
        @Value("#{1 < 1}") //false
        private boolean testLessThan;
        
        @Value("#{1 <= 1}") //true
        private boolean testLessThanOrEqual;
        
        @Value("#{1 > 1}") //false
        private boolean testGreaterThan;
        
        @Value("#{1 >= 1}") //true
        private boolean testGreaterThanOrEqual;
    
        //Logical operators , numberBean.no == 999
        
        @Value("#{numberBean.no == 999 and numberBean.no < 900}") //false
        private boolean testAnd;
        
        @Value("#{numberBean.no == 999 or numberBean.no < 900}") //true
        private boolean testOr;
        
        @Value("#{!(numberBean.no == 999)}") //false
        private boolean testNot;
    
        //Mathematical operators
        
        @Value("#{1 + 1}") //2.0
        private double testAdd;
        
        @Value("#{'1' + '@' + '1'}") //1@1
        private String testAddString;
        
        @Value("#{1 - 1}") //0.0
        private double testSubtraction;
    
        @Value("#{1 * 1}") //1.0
        private double testMultiplication;
        
        @Value("#{10 / 2}") //5.0
        private double testDivision;
        
        @Value("#{10 % 10}") //0.0
        private double testModulus ;
        
        @Value("#{2 ^ 2}") //4.0
        private double testExponentialPower;
    
        @Override
        public String toString() {
            return "Customer [testEqual=" + testEqual + ", testNotEqual="
                    + testNotEqual + ", testLessThan=" + testLessThan
                    + ", testLessThanOrEqual=" + testLessThanOrEqual
                    + ", testGreaterThan=" + testGreaterThan
                    + ", testGreaterThanOrEqual=" + testGreaterThanOrEqual
                    + ", testAnd=" + testAnd + ", testOr=" + testOr + ", testNot="
                    + testNot + ", testAdd=" + testAdd + ", testAddString="
                    + testAddString + ", testSubtraction=" + testSubtraction
                    + ", testMultiplication=" + testMultiplication
                    + ", testDivision=" + testDivision + ", testModulus="
                    + testModulus + ", testExponentialPower="
                    + testExponentialPower + "]";
        }
        
    }
    
    package com.gp6.el.operator;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    @Component("numberBean")
    public class Number {
    
        @Value("999")
        private int no;
    
        public int getNo() {
            return no;
        }
    
        public void setNo(int no) {
            this.no = no;
        }
    
    }
    
    
    • 配置文件
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    
        <context:component-scan base-package="com.gp6.el.operator" />
    
    </beans>
    

    测试文件

    package com.gp6.el.operator;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class Test {
    
         public static void main( String[] args ) {
                
             ApplicationContext context = new ClassPathXmlApplicationContext(
                        "com/gp6/el/operator/el_operator.xml");
    
             Customer customer = (Customer) context.getBean("customerBean");
             System.out.println(customer);
        }
        
    }
    
    
    
    
    • 执行结果
    Customer [testEqual=true, testNotEqual=false, testLessThan=false, testLessThanOrEqual=true, testGreaterThan=false, testGreaterThanOrEqual=true, testAnd=false, testOr=true, testNot=false, testAdd=2.0, testAddString=1@1, testSubtraction=0.0, testMultiplication=1.0, testDivision=5.0, testModulus=0.0, testExponentialPower=4.0]
    
    
    Spring EL以XML形式

    在XML中,类似 < 小于符号不支持,应该使用下面所示文本形式,例如文本等值, ('<' = 'lt') 和 ('<=' = 'le').

    
    <beans xmlns="http://www.springframework.org/schema/beans"
        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-3.0.xsd">
    
        <bean id="customerBean" class="com.gp6.el.operator.Customer">
        
          <property name="testEqual" value="#{1 == 1}" />
          <property name="testNotEqual" value="#{1 != 1}" />
          <property name="testLessThan" value="#{1 lt 1}" />
          <property name="testLessThanOrEqual" value="#{1 le 1}" />
          <property name="testGreaterThan" value="#{1 > 1}" />
          <property name="testGreaterThanOrEqual" value="#{1 >= 1}" />
            
          <property name="testAnd" value="#{numberBean.no == 999 and numberBean.no lt 900}" />
          <property name="testOr" value="#{numberBean.no == 999 or numberBean.no lt 900}" />
          <property name="testNot" value="#{!(numberBean.no == 999)}" />
            
          <property name="testAdd" value="#{1 + 1}" />
          <property name="testAddString" value="#{'1' + '@' + '1'}" />
          <property name="testSubtraction" value="#{1 - 1}" />
          <property name="testMultiplication" value="#{1 * 1}" />
          <property name="testDivision" value="#{10 / 2}" />
          <property name="testModulus" value="#{10 % 10}" />
          <property name="testExponentialPower" value="#{2 ^ 2}" />
            
        </bean>
        
        <bean id="numberBean" class="com.gp6.el.operator.Number">
            <property name="no" value="999" />
        </bean>
        
    </beans> 
    

    -实体类

    package com.gp6.el.operator;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    @Component("customerBean")
    public class Customer {
    
        //@Value("#{1 == 1}") //true
        private boolean testEqual;
        
        //@Value("#{1 != 1}") //false
        private boolean testNotEqual;
        
        //@Value("#{1 < 1}") //false
        private boolean testLessThan;
        
        //@Value("#{1 <= 1}") //true
        private boolean testLessThanOrEqual;
        
        //@Value("#{1 > 1}") //false
        private boolean testGreaterThan;
        
        //@Value("#{1 >= 1}") //true
        private boolean testGreaterThanOrEqual;
    
        //Logical operators , numberBean.no == 999
        
        //@Value("#{numberBean.no == 999 and numberBean.no < 900}") //false
        private boolean testAnd;
        
        //@Value("#{numberBean.no == 999 or numberBean.no < 900}") //true
        private boolean testOr;
        
        //@Value("#{!(numberBean.no == 999)}") //false
        private boolean testNot;
    
        //Mathematical operators
        
        //@Value("#{1 + 1}") //2.0
        private double testAdd;
        
        //@Value("#{'1' + '@' + '1'}") //1@1
        private String testAddString;
        
        //@Value("#{1 - 1}") //0.0
        private double testSubtraction;
    
        //@Value("#{1 * 1}") //1.0
        private double testMultiplication;
        
        //@Value("#{10 / 2}") //5.0
        private double testDivision;
        
        //@Value("#{10 % 10}") //0.0
        private double testModulus ;
        
        //@Value("#{2 ^ 2}") //4.0
        private double testExponentialPower;
    
        public boolean isTestEqual() {
            return testEqual;
        }
    
        public void setTestEqual(boolean testEqual) {
            this.testEqual = testEqual;
        }
    
        public boolean isTestNotEqual() {
            return testNotEqual;
        }
    
        public void setTestNotEqual(boolean testNotEqual) {
            this.testNotEqual = testNotEqual;
        }
    
        public boolean isTestLessThan() {
            return testLessThan;
        }
    
        public void setTestLessThan(boolean testLessThan) {
            this.testLessThan = testLessThan;
        }
    
        public boolean isTestLessThanOrEqual() {
            return testLessThanOrEqual;
        }
    
        public void setTestLessThanOrEqual(boolean testLessThanOrEqual) {
            this.testLessThanOrEqual = testLessThanOrEqual;
        }
    
        public boolean isTestGreaterThan() {
            return testGreaterThan;
        }
    
        public void setTestGreaterThan(boolean testGreaterThan) {
            this.testGreaterThan = testGreaterThan;
        }
    
        public boolean isTestGreaterThanOrEqual() {
            return testGreaterThanOrEqual;
        }
    
        public void setTestGreaterThanOrEqual(boolean testGreaterThanOrEqual) {
            this.testGreaterThanOrEqual = testGreaterThanOrEqual;
        }
    
        public boolean isTestAnd() {
            return testAnd;
        }
    
        public void setTestAnd(boolean testAnd) {
            this.testAnd = testAnd;
        }
    
        public boolean isTestOr() {
            return testOr;
        }
    
        public void setTestOr(boolean testOr) {
            this.testOr = testOr;
        }
    
        public boolean isTestNot() {
            return testNot;
        }
    
        public void setTestNot(boolean testNot) {
            this.testNot = testNot;
        }
    
        public double getTestAdd() {
            return testAdd;
        }
    
        public void setTestAdd(double testAdd) {
            this.testAdd = testAdd;
        }
    
        public String getTestAddString() {
            return testAddString;
        }
    
        public void setTestAddString(String testAddString) {
            this.testAddString = testAddString;
        }
    
        public double getTestSubtraction() {
            return testSubtraction;
        }
    
        public void setTestSubtraction(double testSubtraction) {
            this.testSubtraction = testSubtraction;
        }
    
        public double getTestMultiplication() {
            return testMultiplication;
        }
    
        public void setTestMultiplication(double testMultiplication) {
            this.testMultiplication = testMultiplication;
        }
    
        public double getTestDivision() {
            return testDivision;
        }
    
        public void setTestDivision(double testDivision) {
            this.testDivision = testDivision;
        }
    
        public double getTestModulus() {
            return testModulus;
        }
    
        public void setTestModulus(double testModulus) {
            this.testModulus = testModulus;
        }
    
        public double getTestExponentialPower() {
            return testExponentialPower;
        }
    
        public void setTestExponentialPower(double testExponentialPower) {
            this.testExponentialPower = testExponentialPower;
        }
    
        @Override
        public String toString() {
            return "Customer [testEqual=" + testEqual + ", testNotEqual="
                    + testNotEqual + ", testLessThan=" + testLessThan
                    + ", testLessThanOrEqual=" + testLessThanOrEqual
                    + ", testGreaterThan=" + testGreaterThan
                    + ", testGreaterThanOrEqual=" + testGreaterThanOrEqual
                    + ", testAnd=" + testAnd + ", testOr=" + testOr + ", testNot="
                    + testNot + ", testAdd=" + testAdd + ", testAddString="
                    + testAddString + ", testSubtraction=" + testSubtraction
                    + ", testMultiplication=" + testMultiplication
                    + ", testDivision=" + testDivision + ", testModulus="
                    + testModulus + ", testExponentialPower="
                    + testExponentialPower + "]";
        }
        
    }
    

    相关文章

      网友评论

        本文标题:18 Spring EL运算符实例

        本文链接:https://www.haomeiwen.com/subject/btthdxtx.html