Programmatisch auswerten, eine Bohne Ausdruck mit der Spring Expression Language
Habe ich eine einfache Spring-Bean-Ausdruck, der ausgewertet wird gut, wenn ich es definieren innerhalb einer Anwendung Kontext-Datei:
<bean id="myConfigBean" class="com.example.myBeanConfigBean">
<property name="myProperty" value="#{ someOtherBean.getData() }"/>
</bean>
Nun möchte ich die gleiche Auswertung programmgesteuert. Ich habe den folgenden code:
final ExpressionParser parser = new SpelExpressionParser();
final TemplateParserContext templateContext = new TemplateParserContext();
Expression expression = parser.parseExpression("#{ someOtherBean.getData() }", templateContext);
final String value = (String) expression.getValue();
Dies wirft eine Ausnahme:
EL1007E:(pos 22): Field or property 'someOtherBean' cannot be found on null
Ich denke, ich habe einen root-Objekt irgendwie können die konfigurierten beans wie eine Eigenschaft. Aber ich habe nicht bekommen, es funktioniert noch. Wer hat das auch schon gemacht und könnte einen Tipp geben?
Du musst angemeldet sein, um einen Kommentar abzugeben.
implementieren BeanFactoryAware um eine Referenz auf die bean factory; dann...
BEARBEITEN
Antwort auf die Bemerkung unten. Die
@
löst die Verwendung der bean factory resolver Zugriff auf eine bean; eine alternative ist das hinzufügen von einBeanExpressionContextAccessor
zur evaluation Kontext, und verwenden Sie einBeanExpressionContext
als root-Objekt für die Auswertung...Please take a look @ https://www.mkyong.com/spring3/test-spring-el-with-expressionparser/
Sample-java-code