From aa4e56b251521610999d72fb8c962575bb8bc27a Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Fri, 8 Mar 2019 17:15:03 -0800 Subject: [PATCH] Optimize @Configuration class parsing a little Update `ConfigurationClassParser` to skip `java.lang.annotation` types which were often processed but would never provide useful results. Also use a single shared immutable `SourceClass` instance to represent `Object.class`. Closes gh-22563 --- .../context/annotation/ConfigurationClassParser.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java index d3c84efc277..dce503cf584 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java @@ -140,6 +140,8 @@ class ConfigurationClassParser { private final DeferredImportSelectorHandler deferredImportSelectorHandler = new DeferredImportSelectorHandler(); + private final SourceClass objectSourceClass = new SourceClass(Object.class); + /** * Create a new {@link ConfigurationClassParser} instance that will be used @@ -639,8 +641,8 @@ class ConfigurationClassParser { * Factory method to obtain a {@link SourceClass} from a {@link Class}. */ SourceClass asSourceClass(@Nullable Class classType) throws IOException { - if (classType == null) { - return new SourceClass(Object.class); + if (classType == null || classType.getName().startsWith("java.lang.annotation")) { + return this.objectSourceClass; } try { // Sanity test that we can reflectively read annotations, @@ -671,8 +673,8 @@ class ConfigurationClassParser { * Factory method to obtain a {@link SourceClass} from a class name. */ SourceClass asSourceClass(@Nullable String className) throws IOException { - if (className == null) { - return new SourceClass(Object.class); + if (className == null || className.startsWith("java.lang.annotation")) { + return this.objectSourceClass; } if (className.startsWith("java")) { // Never use ASM for core java types