Browse Source

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
pull/585/merge
Stephane Nicoll 11 years ago
parent
commit
b78b2e9a03
  1. 6
      spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java
  2. 8
      spring-beans/src/test/java/org/springframework/beans/factory/DefaultListableBeanFactoryTests.java

6
spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java

@ -1136,7 +1136,9 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto @@ -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
* that match the required type
* @param requiredType the target dependency type to match against
@ -1158,7 +1160,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto @@ -1158,7 +1160,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
"Multiple beans found with the same priority ('" + highestPriority + "') " +
"among candidates: " + candidateBeans.keySet());
}
else if (candidatePriority > highestPriority) {
else if (candidatePriority < highestPriority) {
highestPriorityBeanName = candidateBeanName;
highestPriority = candidatePriority;
}

8
spring-beans/src/test/java/org/springframework/beans/factory/DefaultListableBeanFactoryTests.java

@ -1399,7 +1399,7 @@ public class DefaultListableBeanFactoryTests { @@ -1399,7 +1399,7 @@ public class DefaultListableBeanFactoryTests {
lbf.registerBeanDefinition("bd2", bd2);
thrown.expect(NoUniqueBeanDefinitionException.class);
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);
}
@ -1613,7 +1613,7 @@ public class DefaultListableBeanFactoryTests { @@ -1613,7 +1613,7 @@ public class DefaultListableBeanFactoryTests {
// expected
assertNotNull("Exception should have cause", ex.getCause());
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 { @@ -2887,10 +2887,10 @@ public class DefaultListableBeanFactoryTests {
}
@Priority(500)
@Priority(5)
private static class HighPriorityTestBean extends TestBean {}
@Priority(5)
@Priority(500)
private static class LowPriorityTestBean extends TestBean {}

Loading…
Cancel
Save