簡體   English   中英

Spring SpEL - 如何使用SpEL來解析消息

[英]Spring SpEL - How to use SpEL to parse a message

我正在嘗試使用Spring SpEL來解析UDP中收到的消息。

只是要了解如何使用Spring SpEL我寫了這個:

context.xml中:

<bean id="message" class="springsimulator.Message">
    <property name="strMessage" value="$TEST,11,22,33"/>
</bean>
<bean id="nmeamessage" class="springsimulator.NMEAMessage">
    <property name="fields" value="#{message.strMessage.split(',')}"/>
</bean>
<bean id="parser" class="springsimulator.SPELParser">
    <property name="values">
        <map>
            <entry key="val1" value="#{nmeamessage.fields[1]}"/>
            <entry key="val2" value="#{nmeamessage.fields[2]}"/>
        </map>
    </property>     
</bean>

Message.java:

public class Message {
    public String strMessage;
    public void setStrMessage(String strMessage) {
        this.strMessage = strMessage;
    }
}

NMEAMessage:

public class NMEAMessage {
    public String[] fields;
    public void setFields(String[] fields) {
        this.fields = fields;
    }
}

分析器:

public class Parser {

    Map<String,String> values;

    public void setValues(Map<String, String> values) {
        this.values = values;
    }

    public String toString() {
        String message = "";
        for (Entry<String, String> entry : values.entrySet()) {
            message += entry.getKey() + ":" + entry.getValue() + "\n";
        }
        return message;
    }
}

主要:

    ExpressionParser parser = new SpelExpressionParser();
    ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("context.xml");
    Parser myparser = (Parser) context.getBean("parser");
    System.out.println(myparser);

這有效,我已經解析了我的消息。

但現在,我希望每次收到消息時都在循環中評估SpEL表達式

while(running) {
    socket.receive(message)
    //Split message to get fields
    //set fields into a map
}

有沒有一種正確的方法來使用SpEL和context.xml?

謝謝

要在運行時解析SpEL表達式,請執行以下操作:

// Setup the SpEL parser: do this once
SpelParserConfiguration spelParserConfiguration = new SpelParserConfiguration(SpelCompilerMode.IMMEDIATE, getClass().getClassLoader());
ExpressionParser expressionParser = new SpelExpressionParser(spelParserConfiguration);
StandardEvaluationContext evaluationContext = new StandardEvaluationContext();

// Parse (compile) the expression: try to do this once
Expression expression = expressionParser.parseExpression(unevaluatedExpression)

// Then within the loop ...

// Supply context, like the value of your namespace
evaluationContext.setVariable(variableName, value);

// Evaluate an expression as many times as you like
Object result = expression.getValue(evaluationContext);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM