Skip to content

Commit 5ba8b83

Browse files
committed
Revert SpelTagValueExpressionResolver code
Signed-off-by: Dominique Villard <[email protected]>
1 parent 0838b57 commit 5ba8b83

File tree

2 files changed

+12
-54
lines changed

2 files changed

+12
-54
lines changed

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/SpelTagValueExpressionResolver.java

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,12 @@
1616

1717
package org.springframework.boot.actuate.autoconfigure.metrics;
1818

19-
import java.util.Map;
20-
import java.util.concurrent.ConcurrentHashMap;
21-
2219
import io.micrometer.common.annotation.ValueExpressionResolver;
2320
import io.micrometer.core.aop.MeterTag;
2421
import io.micrometer.tracing.annotation.SpanTag;
2522

2623
import org.springframework.expression.Expression;
24+
import org.springframework.expression.ExpressionParser;
2725
import org.springframework.expression.spel.standard.SpelExpressionParser;
2826
import org.springframework.expression.spel.support.SimpleEvaluationContext;
2927

@@ -32,27 +30,21 @@
3230
* {@link SpanTag} Micrometer annotations.
3331
*
3432
* @author Dominique Villard
35-
* @since 3.5.1
33+
* @since 4.0.0
3634
*/
3735
public class SpelTagValueExpressionResolver implements ValueExpressionResolver {
3836

39-
private final Map<String, Expression> expressionMap = new ConcurrentHashMap<>();
40-
4137
@Override
4238
public String resolve(String expression, Object parameter) {
4339
try {
44-
Expression parsedExpression = this.expressionMap.computeIfAbsent(expression,
45-
SpelTagValueExpressionResolver::parseExpression);
4640
SimpleEvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build();
47-
return parsedExpression.getValue(context, parameter, String.class);
41+
ExpressionParser expressionParser = new SpelExpressionParser();
42+
Expression expressionToEvaluate = expressionParser.parseExpression(expression);
43+
return expressionToEvaluate.getValue(context, parameter, String.class);
4844
}
4945
catch (Exception ex) {
5046
throw new IllegalStateException("Unable to evaluate SpEL expression '%s'".formatted(expression), ex);
5147
}
5248
}
5349

54-
private static Expression parseExpression(String expression) {
55-
return new SpelExpressionParser().parseExpression(expression);
56-
}
57-
5850
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/SpelTagValueExpressionResolverTests.java

Lines changed: 7 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,11 @@
1616

1717
package org.springframework.boot.actuate.autoconfigure.metrics;
1818

19-
import java.util.Collections;
2019
import java.util.Map;
21-
import java.util.stream.Stream;
2220

2321
import org.junit.jupiter.api.Test;
24-
import org.junit.jupiter.params.ParameterizedTest;
25-
import org.junit.jupiter.params.provider.Arguments;
26-
import org.junit.jupiter.params.provider.MethodSource;
2722

2823
import org.springframework.data.util.Pair;
29-
import org.springframework.test.util.ReflectionTestUtils;
3024

3125
import static org.assertj.core.api.Assertions.assertThat;
3226
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
@@ -35,44 +29,16 @@ class SpelTagValueExpressionResolverTests {
3529

3630
final SpelTagValueExpressionResolver resolver = new SpelTagValueExpressionResolver();
3731

38-
@ParameterizedTest
39-
@MethodSource
40-
void checkValidExpression(Object value, String expression, String expected) {
41-
assertThat(this.resolver.resolve(expression, value)).isEqualTo(expected);
42-
}
43-
44-
static Stream<Arguments> checkValidExpression() {
45-
return Stream.of(Arguments.of("foo", "length", "3"), Arguments.of("foo", "isEmpty", "false"),
46-
Arguments.of(Pair.of("left", "right"), "first", "left"),
47-
Arguments.of(Map.of("foo", "bar"), "['foo']", "bar"),
48-
Arguments.of(Map.of("foo", "bar"), "['baz']", null),
49-
Arguments.of(Map.of("foo", Pair.of(1, 2)), "['foo'].first", "1"),
50-
Arguments.of(Map.of("foo", Pair.of(1, 2)), "['bar']?.first", null));
51-
}
52-
53-
@ParameterizedTest
54-
@MethodSource
55-
void checkInvalidExpression(Object value, String expression) {
56-
assertThatIllegalStateException().isThrownBy(() -> this.resolver.resolve(expression, value));
57-
}
58-
59-
static Stream<Arguments> checkInvalidExpression() {
60-
return Stream.of(Arguments.of("foo", "unknownMethod"), Arguments.of(null, "length"),
61-
Arguments.of(Map.of("foo", Pair.of(1, 2)), "['bar'].first"),
62-
Arguments.of(Collections.emptyMap(), "invalid expression"));
32+
@Test
33+
void checkValidExpression() {
34+
var value = Map.of("foo", Pair.of(1, 2));
35+
assertThat(this.resolver.resolve("['foo'].first", value)).isEqualTo("1");
6336
}
6437

6538
@Test
66-
void checkParserReuse() {
67-
var map = (Map<?, ?>) ReflectionTestUtils.getField(this.resolver, "expressionMap");
68-
69-
this.resolver.resolve("length", "foo");
70-
this.resolver.resolve("length", "bar");
71-
72-
assertThat(map).hasSize(1);
73-
74-
this.resolver.resolve("isEmpty", "foo");
75-
assertThat(map).hasSize(2);
39+
void checkInvalidExpression() {
40+
var value = Map.of("foo", Pair.of(1, 2));
41+
assertThatIllegalStateException().isThrownBy(() -> this.resolver.resolve("['bar'].first", value));
7642
}
7743

7844
}

0 commit comments

Comments
 (0)