1. 程式人生 > >自定義故障觸發條件之Spring Expression Language(SpEL)多變量表達式執行例子

自定義故障觸發條件之Spring Expression Language(SpEL)多變量表達式執行例子

物聯網專案中需要處理使用者自定義的故障觸發條件,表示式可能千奇百怪,這就需要用到SpEL來處理使用者輸入的表示式了,網上的例子都是單個變數的賦值,對於實際的業務沒有任何意義。我這裡的例子是多個變數的輸入的表示式。希望對新手同學有用。

	public void testAAA(){
		ExpressionParser parser = new SpelExpressionParser();
		EvaluationContext context = new StandardEvaluationContext();
		context.setVariable("A", "haha");


		String result1 = parser.parseExpression("#A").getValue(context, String.class);//haha
		String result2 = parser.parseExpression("{#A}").getValue(context, String.class);//haha
		try {//此行程式碼異常
			String result3 = parser.parseExpression("#{#V1}").getValue(context, String.class);
		}
		catch (Exception e) {
			e.printStackTrace();//Unexpected token. Expected 'identifier' but was 'lcurly({)'
		}


		LOG.info("{},{}",result1,result2);
	}
	public void testBBB()
	{
		ExpressionParser parser = new SpelExpressionParser();
		StandardEvaluationContext evContext = new StandardEvaluationContext();

		evContext.setVariable("A", 5);
		evContext.setVariable("B", 2);
		String expressionTemplate1 = "#{#A}+#{#B}< 2";
		String expressionTemplate2 = "#{#A}+#{#B}> 2";


		String result1 = parser.parseExpression(expressionTemplate1, new TemplateParserContext()).getValue(evContext,String.class);
		String result2 = parser.parseExpression(expressionTemplate2, new TemplateParserContext()).getValue(evContext,String.class);

		//下面這兩行程式碼會報異常, 只能獲取表示式字串,沒法繼續執行表示式
		try {
			String result3 = parser.parseExpression(expressionTemplate1, new TemplateParserContext()).getValue(evContext,boolean.class).toString();
			String result4 = parser.parseExpression(expressionTemplate2, new TemplateParserContext()).getValue(evContext,boolean.class).toString();

		}
		catch (Exception e) {
			e.printStackTrace();//can not convert from java.lang.String to boolean
		}

		String value1 = parser.parseExpression(result1).getValue().toString();//false
		String value2 = parser.parseExpression(result2).getValue().toString();//true

		boolean value3 = parser.parseExpression(result1).getValue(boolean.class);//false
		boolean value4 = parser.parseExpression(result2).getValue(boolean.class);//true

		LOG.info("{},{}", result1,value1);
		LOG.info("{},{}", result2,value2);
	}