Fix priority semantic
Commit 5fe8f52
introduced a support for @Priority as an alternative to
@Primary but it broke the semantic of the priority value. This commit
fixes this inconsistency.
As for @Order, the lowest value means the highest priority so if
several beans are candidates for injection, the one having the lowest
value will be used.
Issue: SPR-10548
This commit is contained in:
parent
ea16ce0aa0
commit
b78b2e9a03
|
@ -1136,7 +1136,9 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine the candidate with the highest priority in the given set of beans.
|
* Determine the candidate with the highest priority in the given set of beans. As
|
||||||
|
* defined by the {@link org.springframework.core.Ordered} interface, the lowest
|
||||||
|
* value has the highest priority.
|
||||||
* @param candidateBeans a Map of candidate names and candidate instances
|
* @param candidateBeans a Map of candidate names and candidate instances
|
||||||
* that match the required type
|
* that match the required type
|
||||||
* @param requiredType the target dependency type to match against
|
* @param requiredType the target dependency type to match against
|
||||||
|
@ -1158,7 +1160,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
|
||||||
"Multiple beans found with the same priority ('" + highestPriority + "') " +
|
"Multiple beans found with the same priority ('" + highestPriority + "') " +
|
||||||
"among candidates: " + candidateBeans.keySet());
|
"among candidates: " + candidateBeans.keySet());
|
||||||
}
|
}
|
||||||
else if (candidatePriority > highestPriority) {
|
else if (candidatePriority < highestPriority) {
|
||||||
highestPriorityBeanName = candidateBeanName;
|
highestPriorityBeanName = candidateBeanName;
|
||||||
highestPriority = candidatePriority;
|
highestPriority = candidatePriority;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1399,7 +1399,7 @@ public class DefaultListableBeanFactoryTests {
|
||||||
lbf.registerBeanDefinition("bd2", bd2);
|
lbf.registerBeanDefinition("bd2", bd2);
|
||||||
thrown.expect(NoUniqueBeanDefinitionException.class);
|
thrown.expect(NoUniqueBeanDefinitionException.class);
|
||||||
thrown.expectMessage(containsString("Multiple beans found with the same priority"));
|
thrown.expectMessage(containsString("Multiple beans found with the same priority"));
|
||||||
thrown.expectMessage(containsString("500")); // conflicting priority
|
thrown.expectMessage(containsString("5")); // conflicting priority
|
||||||
lbf.getBean(TestBean.class);
|
lbf.getBean(TestBean.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1613,7 +1613,7 @@ public class DefaultListableBeanFactoryTests {
|
||||||
// expected
|
// expected
|
||||||
assertNotNull("Exception should have cause", ex.getCause());
|
assertNotNull("Exception should have cause", ex.getCause());
|
||||||
assertEquals("Wrong cause type", NoUniqueBeanDefinitionException.class, ex.getCause().getClass());
|
assertEquals("Wrong cause type", NoUniqueBeanDefinitionException.class, ex.getCause().getClass());
|
||||||
assertTrue(ex.getMessage().contains("500")); // conflicting priority
|
assertTrue(ex.getMessage().contains("5")); // conflicting priority
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2887,10 +2887,10 @@ public class DefaultListableBeanFactoryTests {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Priority(500)
|
@Priority(5)
|
||||||
private static class HighPriorityTestBean extends TestBean {}
|
private static class HighPriorityTestBean extends TestBean {}
|
||||||
|
|
||||||
@Priority(5)
|
@Priority(500)
|
||||||
private static class LowPriorityTestBean extends TestBean {}
|
private static class LowPriorityTestBean extends TestBean {}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue