From babd5517aa892750bf6aca34e9572d67e84aa410 Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Tue, 21 Feb 2017 11:42:31 +0100 Subject: [PATCH] Revert ParsingPathMatcher concurrency checks `PathPatternParser` is now thread-safe and creates a new internal parser for each `parse` call, since this operation is cheap. This commit removes the `ThreadLocal` based instances of `PathPatternParser` in `ParsingPathMatcher` which are not required anymore. Issue: SPR-15246 --- .../org/springframework/web/util/ParsingPathMatcher.java | 5 ++--- .../springframework/web/util/patterns/PathPatternParser.java | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/web/util/ParsingPathMatcher.java b/spring-web/src/main/java/org/springframework/web/util/ParsingPathMatcher.java index d3f585301d..4344e7183c 100644 --- a/spring-web/src/main/java/org/springframework/web/util/ParsingPathMatcher.java +++ b/spring-web/src/main/java/org/springframework/web/util/ParsingPathMatcher.java @@ -43,8 +43,7 @@ public class ParsingPathMatcher implements PathMatcher { private final ConcurrentMap cache = new ConcurrentHashMap<>(64); - private static final ThreadLocal PARSER - = ThreadLocal.withInitial(() -> new PathPatternParser()); + private final PathPatternParser parser = new PathPatternParser(); @Override public boolean match(String pattern, String path) { @@ -113,7 +112,7 @@ public class ParsingPathMatcher implements PathMatcher { private PathPattern getPathPattern(String pattern) { PathPattern pathPattern = this.cache.get(pattern); if (pathPattern == null) { - pathPattern = PARSER.get().parse(pattern); + pathPattern = this.parser.parse(pattern); this.cache.put(pattern, pathPattern); } return pathPattern; diff --git a/spring-web/src/main/java/org/springframework/web/util/patterns/PathPatternParser.java b/spring-web/src/main/java/org/springframework/web/util/patterns/PathPatternParser.java index 341da7898a..5c56a62f6f 100644 --- a/spring-web/src/main/java/org/springframework/web/util/patterns/PathPatternParser.java +++ b/spring-web/src/main/java/org/springframework/web/util/patterns/PathPatternParser.java @@ -63,9 +63,9 @@ public class PathPatternParser { * @param pathPattern the input path pattern, e.g. /foo/{bar} * @return a PathPattern for quickly matching paths against the specified path pattern */ - public PathPattern parse(String pattern) { + public PathPattern parse(String pathPattern) { InternalPathPatternParser ippp = new InternalPathPatternParser(separator, caseSensitive); - return ippp.parse(pattern); + return ippp.parse(pathPattern); } }