From f7c3b814e393cb4ea7b644697485356b28cd7e02 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 23 Jan 2017 13:37:22 +0100 Subject: [PATCH] Only expose ASM-driven method order if the methods match Issue: SPR-14505 (cherry picked from commit 253060c) --- .../annotation/ConfigurationClassParser.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 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 08d284881f2..0c67725f8ce 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 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -366,15 +366,20 @@ class ConfigurationClassParser { AnnotationMetadata asm = this.metadataReaderFactory.getMetadataReader(original.getClassName()).getAnnotationMetadata(); Set asmMethods = asm.getAnnotatedMethods(Bean.class.getName()); - Set reflectionMethods = beanMethods; - beanMethods = new LinkedHashSet(); - for (MethodMetadata asmMethod : asmMethods) { - for (MethodMetadata reflectionMethod : reflectionMethods) { - if (reflectionMethod.getMethodName().equals(asmMethod.getMethodName())) { - beanMethods.add(reflectionMethod); - break; + if (asmMethods.size() >= beanMethods.size()) { + Set selectedMethods = new LinkedHashSet(asmMethods.size()); + for (MethodMetadata asmMethod : asmMethods) { + for (MethodMetadata beanMethod : beanMethods) { + if (beanMethod.getMethodName().equals(asmMethod.getMethodName())) { + selectedMethods.add(beanMethod); + break; + } } } + if (selectedMethods.size() == beanMethods.size()) { + // All reflection-detected methods found in ASM method set -> proceed + beanMethods = selectedMethods; + } } } catch (IOException ex) {