gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:06:11 30 4
gpt4 key购买 nike

我正在尝试使用 spring SpEL 来解析在 UDP 中收到的消息。

为了理解如何使用 Spring SpEL,我写了这个:

上下文.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>

消息.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);

关于java - Spring SpEL - 如何使用 SpEL 解析消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30306502/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com