Polishing

This commit is contained in:
Sam Brannen 2024-08-08 12:24:57 +03:00
parent ddee309e11
commit 3b506e11a1
2 changed files with 142 additions and 158 deletions

View File

@ -82,8 +82,8 @@ public class QualifierAnnotationAutowireCandidateResolver extends GenericTypeAwa
} }
/** /**
* Create a new QualifierAnnotationAutowireCandidateResolver * Create a new {@code QualifierAnnotationAutowireCandidateResolver} for the given
* for the given qualifier annotation type. * qualifier annotation type.
* @param qualifierType the qualifier annotation to look for * @param qualifierType the qualifier annotation to look for
*/ */
public QualifierAnnotationAutowireCandidateResolver(Class<? extends Annotation> qualifierType) { public QualifierAnnotationAutowireCandidateResolver(Class<? extends Annotation> qualifierType) {
@ -92,8 +92,8 @@ public class QualifierAnnotationAutowireCandidateResolver extends GenericTypeAwa
} }
/** /**
* Create a new QualifierAnnotationAutowireCandidateResolver * Create a new {@code QualifierAnnotationAutowireCandidateResolver} for the given
* for the given qualifier annotation types. * qualifier annotation types.
* @param qualifierTypes the qualifier annotations to look for * @param qualifierTypes the qualifier annotations to look for
*/ */
public QualifierAnnotationAutowireCandidateResolver(Set<Class<? extends Annotation>> qualifierTypes) { public QualifierAnnotationAutowireCandidateResolver(Set<Class<? extends Annotation>> qualifierTypes) {

View File

@ -46,70 +46,71 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
*/ */
class InjectAnnotationAutowireContextTests { class InjectAnnotationAutowireContextTests {
private static final String PERSON1 = "person1";
private static final String PERSON2 = "person2";
private static final String JUERGEN = "juergen"; private static final String JUERGEN = "juergen";
private static final String MARK = "mark"; private static final String MARK = "mark";
@Test @Test
void testAutowiredFieldWithSingleNonQualifiedCandidate() { void autowiredFieldWithSingleNonQualifiedCandidate() {
GenericApplicationContext context = new GenericApplicationContext(); GenericApplicationContext context = new GenericApplicationContext();
ConstructorArgumentValues cavs = new ConstructorArgumentValues(); ConstructorArgumentValues cavs = new ConstructorArgumentValues();
cavs.addGenericArgumentValue(JUERGEN); cavs.addGenericArgumentValue(JUERGEN);
RootBeanDefinition person = new RootBeanDefinition(Person.class, cavs, null); RootBeanDefinition person = new RootBeanDefinition(Person.class, cavs, null);
context.registerBeanDefinition(JUERGEN, person); context.registerBeanDefinition(PERSON1, person);
context.registerBeanDefinition("autowired", context.registerBeanDefinition("autowired", new RootBeanDefinition(QualifiedFieldTestBean.class));
new RootBeanDefinition(QualifiedFieldTestBean.class));
AnnotationConfigUtils.registerAnnotationConfigProcessors(context); AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
assertThatExceptionOfType(BeanCreationException.class).isThrownBy( assertThatExceptionOfType(BeanCreationException.class)
context::refresh) .isThrownBy(context::refresh)
.satisfies(ex -> { .satisfies(ex -> {
assertThat(ex.getRootCause()).isInstanceOf(NoSuchBeanDefinitionException.class); assertThat(ex.getRootCause()).isInstanceOf(NoSuchBeanDefinitionException.class);
assertThat(ex.getBeanName()).isEqualTo("autowired"); assertThat(ex.getBeanName()).isEqualTo("autowired");
}); });
} }
@Test @Test
void testAutowiredMethodParameterWithSingleNonQualifiedCandidate() { void autowiredMethodParameterWithSingleNonQualifiedCandidate() {
GenericApplicationContext context = new GenericApplicationContext(); GenericApplicationContext context = new GenericApplicationContext();
ConstructorArgumentValues cavs = new ConstructorArgumentValues(); ConstructorArgumentValues cavs = new ConstructorArgumentValues();
cavs.addGenericArgumentValue(JUERGEN); cavs.addGenericArgumentValue(JUERGEN);
RootBeanDefinition person = new RootBeanDefinition(Person.class, cavs, null); RootBeanDefinition person = new RootBeanDefinition(Person.class, cavs, null);
context.registerBeanDefinition(JUERGEN, person); context.registerBeanDefinition(PERSON1, person);
context.registerBeanDefinition("autowired", context.registerBeanDefinition("autowired", new RootBeanDefinition(QualifiedMethodParameterTestBean.class));
new RootBeanDefinition(QualifiedMethodParameterTestBean.class));
AnnotationConfigUtils.registerAnnotationConfigProcessors(context); AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
assertThatExceptionOfType(BeanCreationException.class).isThrownBy( assertThatExceptionOfType(BeanCreationException.class)
context::refresh) .isThrownBy(context::refresh)
.satisfies(ex -> { .satisfies(ex -> {
assertThat(ex.getRootCause()).isInstanceOf(NoSuchBeanDefinitionException.class); assertThat(ex.getRootCause()).isInstanceOf(NoSuchBeanDefinitionException.class);
assertThat(ex.getBeanName()).isEqualTo("autowired"); assertThat(ex.getBeanName()).isEqualTo("autowired");
}); });
} }
@Test @Test
void testAutowiredConstructorArgumentWithSingleNonQualifiedCandidate() { void autowiredConstructorArgumentWithSingleNonQualifiedCandidate() {
GenericApplicationContext context = new GenericApplicationContext(); GenericApplicationContext context = new GenericApplicationContext();
ConstructorArgumentValues cavs = new ConstructorArgumentValues(); ConstructorArgumentValues cavs = new ConstructorArgumentValues();
cavs.addGenericArgumentValue(JUERGEN); cavs.addGenericArgumentValue(JUERGEN);
RootBeanDefinition person = new RootBeanDefinition(Person.class, cavs, null); RootBeanDefinition person = new RootBeanDefinition(Person.class, cavs, null);
context.registerBeanDefinition(JUERGEN, person); context.registerBeanDefinition(PERSON1, person);
context.registerBeanDefinition("autowired", context.registerBeanDefinition("autowired", new RootBeanDefinition(QualifiedConstructorArgumentTestBean.class));
new RootBeanDefinition(QualifiedConstructorArgumentTestBean.class));
AnnotationConfigUtils.registerAnnotationConfigProcessors(context); AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
assertThatExceptionOfType(UnsatisfiedDependencyException.class).isThrownBy( assertThatExceptionOfType(UnsatisfiedDependencyException.class)
context::refresh) .isThrownBy(context::refresh)
.satisfies(ex -> assertThat(ex.getBeanName()).isEqualTo("autowired")); .satisfies(ex -> assertThat(ex.getBeanName()).isEqualTo("autowired"));
} }
@Test @Test
void testAutowiredFieldWithSingleQualifiedCandidate() { void autowiredFieldWithSingleQualifiedCandidate() {
GenericApplicationContext context = new GenericApplicationContext(); GenericApplicationContext context = new GenericApplicationContext();
ConstructorArgumentValues cavs = new ConstructorArgumentValues(); ConstructorArgumentValues cavs = new ConstructorArgumentValues();
cavs.addGenericArgumentValue(JUERGEN); cavs.addGenericArgumentValue(JUERGEN);
RootBeanDefinition person = new RootBeanDefinition(Person.class, cavs, null); RootBeanDefinition person = new RootBeanDefinition(Person.class, cavs, null);
person.addQualifier(new AutowireCandidateQualifier(TestQualifier.class)); person.addQualifier(new AutowireCandidateQualifier(TestQualifier.class));
context.registerBeanDefinition(JUERGEN, person); context.registerBeanDefinition(PERSON1, person);
context.registerBeanDefinition("autowired", new RootBeanDefinition(QualifiedFieldTestBean.class)); context.registerBeanDefinition("autowired", new RootBeanDefinition(QualifiedFieldTestBean.class));
AnnotationConfigUtils.registerAnnotationConfigProcessors(context); AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
context.refresh(); context.refresh();
@ -118,15 +119,14 @@ class InjectAnnotationAutowireContextTests {
} }
@Test @Test
void testAutowiredMethodParameterWithSingleQualifiedCandidate() { void autowiredMethodParameterWithSingleQualifiedCandidate() {
GenericApplicationContext context = new GenericApplicationContext(); GenericApplicationContext context = new GenericApplicationContext();
ConstructorArgumentValues cavs = new ConstructorArgumentValues(); ConstructorArgumentValues cavs = new ConstructorArgumentValues();
cavs.addGenericArgumentValue(JUERGEN); cavs.addGenericArgumentValue(JUERGEN);
RootBeanDefinition person = new RootBeanDefinition(Person.class, cavs, null); RootBeanDefinition person = new RootBeanDefinition(Person.class, cavs, null);
person.addQualifier(new AutowireCandidateQualifier(TestQualifier.class)); person.addQualifier(new AutowireCandidateQualifier(TestQualifier.class));
context.registerBeanDefinition(JUERGEN, person); context.registerBeanDefinition(PERSON1, person);
context.registerBeanDefinition("autowired", context.registerBeanDefinition("autowired", new RootBeanDefinition(QualifiedMethodParameterTestBean.class));
new RootBeanDefinition(QualifiedMethodParameterTestBean.class));
AnnotationConfigUtils.registerAnnotationConfigProcessors(context); AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
context.refresh(); context.refresh();
QualifiedMethodParameterTestBean bean = QualifiedMethodParameterTestBean bean =
@ -135,15 +135,14 @@ class InjectAnnotationAutowireContextTests {
} }
@Test @Test
void testAutowiredMethodParameterWithStaticallyQualifiedCandidate() { void autowiredMethodParameterWithStaticallyQualifiedCandidate() {
GenericApplicationContext context = new GenericApplicationContext(); GenericApplicationContext context = new GenericApplicationContext();
ConstructorArgumentValues cavs = new ConstructorArgumentValues(); ConstructorArgumentValues cavs = new ConstructorArgumentValues();
cavs.addGenericArgumentValue(JUERGEN); cavs.addGenericArgumentValue(JUERGEN);
RootBeanDefinition person = new RootBeanDefinition(QualifiedPerson.class, cavs, null); RootBeanDefinition person = new RootBeanDefinition(QualifiedPerson.class, cavs, null);
context.registerBeanDefinition(JUERGEN, context.registerBeanDefinition(PERSON1,
ScopedProxyUtils.createScopedProxy(new BeanDefinitionHolder(person, JUERGEN), context, true).getBeanDefinition()); ScopedProxyUtils.createScopedProxy(new BeanDefinitionHolder(person, JUERGEN), context, true).getBeanDefinition());
context.registerBeanDefinition("autowired", context.registerBeanDefinition("autowired", new RootBeanDefinition(QualifiedMethodParameterTestBean.class));
new RootBeanDefinition(QualifiedMethodParameterTestBean.class));
AnnotationConfigUtils.registerAnnotationConfigProcessors(context); AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
context.refresh(); context.refresh();
QualifiedMethodParameterTestBean bean = QualifiedMethodParameterTestBean bean =
@ -152,18 +151,17 @@ class InjectAnnotationAutowireContextTests {
} }
@Test @Test
void testAutowiredMethodParameterWithStaticallyQualifiedCandidateAmongOthers() { void autowiredMethodParameterWithStaticallyQualifiedCandidateAmongOthers() {
GenericApplicationContext context = new GenericApplicationContext(); GenericApplicationContext context = new GenericApplicationContext();
ConstructorArgumentValues cavs = new ConstructorArgumentValues(); ConstructorArgumentValues cavs = new ConstructorArgumentValues();
cavs.addGenericArgumentValue(JUERGEN); cavs.addGenericArgumentValue(JUERGEN);
RootBeanDefinition person = new RootBeanDefinition(QualifiedPerson.class, cavs, null); RootBeanDefinition person1 = new RootBeanDefinition(QualifiedPerson.class, cavs, null);
ConstructorArgumentValues cavs2 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs2 = new ConstructorArgumentValues();
cavs2.addGenericArgumentValue(MARK); cavs2.addGenericArgumentValue(MARK);
RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null); RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null);
context.registerBeanDefinition(JUERGEN, person); context.registerBeanDefinition(PERSON1, person1);
context.registerBeanDefinition(MARK, person2); context.registerBeanDefinition(PERSON2, person2);
context.registerBeanDefinition("autowired", context.registerBeanDefinition("autowired", new RootBeanDefinition(QualifiedMethodParameterTestBean.class));
new RootBeanDefinition(QualifiedMethodParameterTestBean.class));
AnnotationConfigUtils.registerAnnotationConfigProcessors(context); AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
context.refresh(); context.refresh();
QualifiedMethodParameterTestBean bean = QualifiedMethodParameterTestBean bean =
@ -172,15 +170,14 @@ class InjectAnnotationAutowireContextTests {
} }
@Test @Test
void testAutowiredConstructorArgumentWithSingleQualifiedCandidate() { void autowiredConstructorArgumentWithSingleQualifiedCandidate() {
GenericApplicationContext context = new GenericApplicationContext(); GenericApplicationContext context = new GenericApplicationContext();
ConstructorArgumentValues cavs = new ConstructorArgumentValues(); ConstructorArgumentValues cavs = new ConstructorArgumentValues();
cavs.addGenericArgumentValue(JUERGEN); cavs.addGenericArgumentValue(JUERGEN);
RootBeanDefinition person = new RootBeanDefinition(Person.class, cavs, null); RootBeanDefinition person = new RootBeanDefinition(Person.class, cavs, null);
person.addQualifier(new AutowireCandidateQualifier(TestQualifier.class)); person.addQualifier(new AutowireCandidateQualifier(TestQualifier.class));
context.registerBeanDefinition(JUERGEN, person); context.registerBeanDefinition(PERSON1, person);
context.registerBeanDefinition("autowired", context.registerBeanDefinition("autowired", new RootBeanDefinition(QualifiedConstructorArgumentTestBean.class));
new RootBeanDefinition(QualifiedConstructorArgumentTestBean.class));
AnnotationConfigUtils.registerAnnotationConfigProcessors(context); AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
context.refresh(); context.refresh();
QualifiedConstructorArgumentTestBean bean = QualifiedConstructorArgumentTestBean bean =
@ -189,7 +186,7 @@ class InjectAnnotationAutowireContextTests {
} }
@Test @Test
void testAutowiredFieldWithMultipleNonQualifiedCandidates() { void autowiredFieldWithMultipleNonQualifiedCandidates() {
GenericApplicationContext context = new GenericApplicationContext(); GenericApplicationContext context = new GenericApplicationContext();
ConstructorArgumentValues cavs1 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs1 = new ConstructorArgumentValues();
cavs1.addGenericArgumentValue(JUERGEN); cavs1.addGenericArgumentValue(JUERGEN);
@ -197,21 +194,20 @@ class InjectAnnotationAutowireContextTests {
ConstructorArgumentValues cavs2 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs2 = new ConstructorArgumentValues();
cavs2.addGenericArgumentValue(MARK); cavs2.addGenericArgumentValue(MARK);
RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null); RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null);
context.registerBeanDefinition(JUERGEN, person1); context.registerBeanDefinition(PERSON1, person1);
context.registerBeanDefinition(MARK, person2); context.registerBeanDefinition(PERSON2, person2);
context.registerBeanDefinition("autowired", context.registerBeanDefinition("autowired", new RootBeanDefinition(QualifiedFieldTestBean.class));
new RootBeanDefinition(QualifiedFieldTestBean.class));
AnnotationConfigUtils.registerAnnotationConfigProcessors(context); AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
assertThatExceptionOfType(BeanCreationException.class).isThrownBy( assertThatExceptionOfType(BeanCreationException.class)
context::refresh) .isThrownBy(context::refresh)
.satisfies(ex -> { .satisfies(ex -> {
assertThat(ex.getRootCause()).isInstanceOf(NoSuchBeanDefinitionException.class); assertThat(ex.getRootCause()).isInstanceOf(NoSuchBeanDefinitionException.class);
assertThat(ex.getBeanName()).isEqualTo("autowired"); assertThat(ex.getBeanName()).isEqualTo("autowired");
}); });
} }
@Test @Test
void testAutowiredMethodParameterWithMultipleNonQualifiedCandidates() { void autowiredMethodParameterWithMultipleNonQualifiedCandidates() {
GenericApplicationContext context = new GenericApplicationContext(); GenericApplicationContext context = new GenericApplicationContext();
ConstructorArgumentValues cavs1 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs1 = new ConstructorArgumentValues();
cavs1.addGenericArgumentValue(JUERGEN); cavs1.addGenericArgumentValue(JUERGEN);
@ -219,21 +215,20 @@ class InjectAnnotationAutowireContextTests {
ConstructorArgumentValues cavs2 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs2 = new ConstructorArgumentValues();
cavs2.addGenericArgumentValue(MARK); cavs2.addGenericArgumentValue(MARK);
RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null); RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null);
context.registerBeanDefinition(JUERGEN, person1); context.registerBeanDefinition(PERSON1, person1);
context.registerBeanDefinition(MARK, person2); context.registerBeanDefinition(PERSON2, person2);
context.registerBeanDefinition("autowired", context.registerBeanDefinition("autowired", new RootBeanDefinition(QualifiedMethodParameterTestBean.class));
new RootBeanDefinition(QualifiedMethodParameterTestBean.class));
AnnotationConfigUtils.registerAnnotationConfigProcessors(context); AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
assertThatExceptionOfType(BeanCreationException.class).isThrownBy( assertThatExceptionOfType(BeanCreationException.class)
context::refresh) .isThrownBy(context::refresh)
.satisfies(ex -> { .satisfies(ex -> {
assertThat(ex.getRootCause()).isInstanceOf(NoSuchBeanDefinitionException.class); assertThat(ex.getRootCause()).isInstanceOf(NoSuchBeanDefinitionException.class);
assertThat(ex.getBeanName()).isEqualTo("autowired"); assertThat(ex.getBeanName()).isEqualTo("autowired");
}); });
} }
@Test @Test
void testAutowiredConstructorArgumentWithMultipleNonQualifiedCandidates() { void autowiredConstructorArgumentWithMultipleNonQualifiedCandidates() {
GenericApplicationContext context = new GenericApplicationContext(); GenericApplicationContext context = new GenericApplicationContext();
ConstructorArgumentValues cavs1 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs1 = new ConstructorArgumentValues();
cavs1.addGenericArgumentValue(JUERGEN); cavs1.addGenericArgumentValue(JUERGEN);
@ -241,18 +236,17 @@ class InjectAnnotationAutowireContextTests {
ConstructorArgumentValues cavs2 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs2 = new ConstructorArgumentValues();
cavs2.addGenericArgumentValue(MARK); cavs2.addGenericArgumentValue(MARK);
RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null); RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null);
context.registerBeanDefinition(JUERGEN, person1); context.registerBeanDefinition(PERSON1, person1);
context.registerBeanDefinition(MARK, person2); context.registerBeanDefinition(PERSON2, person2);
context.registerBeanDefinition("autowired", context.registerBeanDefinition("autowired", new RootBeanDefinition(QualifiedConstructorArgumentTestBean.class));
new RootBeanDefinition(QualifiedConstructorArgumentTestBean.class));
AnnotationConfigUtils.registerAnnotationConfigProcessors(context); AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
assertThatExceptionOfType(UnsatisfiedDependencyException.class).isThrownBy( assertThatExceptionOfType(UnsatisfiedDependencyException.class)
context::refresh) .isThrownBy(context::refresh)
.satisfies(ex -> assertThat(ex.getBeanName()).isEqualTo("autowired")); .satisfies(ex -> assertThat(ex.getBeanName()).isEqualTo("autowired"));
} }
@Test @Test
void testAutowiredFieldResolvesQualifiedCandidate() { void autowiredFieldResolvesQualifiedCandidate() {
GenericApplicationContext context = new GenericApplicationContext(); GenericApplicationContext context = new GenericApplicationContext();
ConstructorArgumentValues cavs1 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs1 = new ConstructorArgumentValues();
cavs1.addGenericArgumentValue(JUERGEN); cavs1.addGenericArgumentValue(JUERGEN);
@ -261,10 +255,9 @@ class InjectAnnotationAutowireContextTests {
ConstructorArgumentValues cavs2 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs2 = new ConstructorArgumentValues();
cavs2.addGenericArgumentValue(MARK); cavs2.addGenericArgumentValue(MARK);
RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null); RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null);
context.registerBeanDefinition(JUERGEN, person1); context.registerBeanDefinition(PERSON1, person1);
context.registerBeanDefinition(MARK, person2); context.registerBeanDefinition(PERSON2, person2);
context.registerBeanDefinition("autowired", context.registerBeanDefinition("autowired", new RootBeanDefinition(QualifiedFieldTestBean.class));
new RootBeanDefinition(QualifiedFieldTestBean.class));
AnnotationConfigUtils.registerAnnotationConfigProcessors(context); AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
context.refresh(); context.refresh();
QualifiedFieldTestBean bean = (QualifiedFieldTestBean) context.getBean("autowired"); QualifiedFieldTestBean bean = (QualifiedFieldTestBean) context.getBean("autowired");
@ -272,7 +265,7 @@ class InjectAnnotationAutowireContextTests {
} }
@Test @Test
void testAutowiredMethodParameterResolvesQualifiedCandidate() { void autowiredMethodParameterResolvesQualifiedCandidate() {
GenericApplicationContext context = new GenericApplicationContext(); GenericApplicationContext context = new GenericApplicationContext();
ConstructorArgumentValues cavs1 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs1 = new ConstructorArgumentValues();
cavs1.addGenericArgumentValue(JUERGEN); cavs1.addGenericArgumentValue(JUERGEN);
@ -281,10 +274,9 @@ class InjectAnnotationAutowireContextTests {
ConstructorArgumentValues cavs2 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs2 = new ConstructorArgumentValues();
cavs2.addGenericArgumentValue(MARK); cavs2.addGenericArgumentValue(MARK);
RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null); RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null);
context.registerBeanDefinition(JUERGEN, person1); context.registerBeanDefinition(PERSON1, person1);
context.registerBeanDefinition(MARK, person2); context.registerBeanDefinition(PERSON2, person2);
context.registerBeanDefinition("autowired", context.registerBeanDefinition("autowired", new RootBeanDefinition(QualifiedMethodParameterTestBean.class));
new RootBeanDefinition(QualifiedMethodParameterTestBean.class));
AnnotationConfigUtils.registerAnnotationConfigProcessors(context); AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
context.refresh(); context.refresh();
QualifiedMethodParameterTestBean bean = QualifiedMethodParameterTestBean bean =
@ -293,7 +285,7 @@ class InjectAnnotationAutowireContextTests {
} }
@Test @Test
void testAutowiredConstructorArgumentResolvesQualifiedCandidate() { void autowiredConstructorArgumentResolvesQualifiedCandidate() {
GenericApplicationContext context = new GenericApplicationContext(); GenericApplicationContext context = new GenericApplicationContext();
ConstructorArgumentValues cavs1 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs1 = new ConstructorArgumentValues();
cavs1.addGenericArgumentValue(JUERGEN); cavs1.addGenericArgumentValue(JUERGEN);
@ -302,10 +294,9 @@ class InjectAnnotationAutowireContextTests {
ConstructorArgumentValues cavs2 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs2 = new ConstructorArgumentValues();
cavs2.addGenericArgumentValue(MARK); cavs2.addGenericArgumentValue(MARK);
RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null); RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null);
context.registerBeanDefinition(JUERGEN, person1); context.registerBeanDefinition(PERSON1, person1);
context.registerBeanDefinition(MARK, person2); context.registerBeanDefinition(PERSON2, person2);
context.registerBeanDefinition("autowired", context.registerBeanDefinition("autowired", new RootBeanDefinition(QualifiedConstructorArgumentTestBean.class));
new RootBeanDefinition(QualifiedConstructorArgumentTestBean.class));
AnnotationConfigUtils.registerAnnotationConfigProcessors(context); AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
context.refresh(); context.refresh();
QualifiedConstructorArgumentTestBean bean = QualifiedConstructorArgumentTestBean bean =
@ -314,7 +305,7 @@ class InjectAnnotationAutowireContextTests {
} }
@Test @Test
void testAutowiredFieldResolvesQualifiedCandidateWithDefaultValueAndNoValueOnBeanDefinition() { void autowiredFieldResolvesQualifiedCandidateWithDefaultValueAndNoValueOnBeanDefinition() {
GenericApplicationContext context = new GenericApplicationContext(); GenericApplicationContext context = new GenericApplicationContext();
ConstructorArgumentValues cavs1 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs1 = new ConstructorArgumentValues();
cavs1.addGenericArgumentValue(JUERGEN); cavs1.addGenericArgumentValue(JUERGEN);
@ -324,10 +315,9 @@ class InjectAnnotationAutowireContextTests {
ConstructorArgumentValues cavs2 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs2 = new ConstructorArgumentValues();
cavs2.addGenericArgumentValue(MARK); cavs2.addGenericArgumentValue(MARK);
RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null); RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null);
context.registerBeanDefinition(JUERGEN, person1); context.registerBeanDefinition(PERSON1, person1);
context.registerBeanDefinition(MARK, person2); context.registerBeanDefinition(PERSON2, person2);
context.registerBeanDefinition("autowired", context.registerBeanDefinition("autowired", new RootBeanDefinition(QualifiedFieldWithDefaultValueTestBean.class));
new RootBeanDefinition(QualifiedFieldWithDefaultValueTestBean.class));
AnnotationConfigUtils.registerAnnotationConfigProcessors(context); AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
context.refresh(); context.refresh();
QualifiedFieldWithDefaultValueTestBean bean = QualifiedFieldWithDefaultValueTestBean bean =
@ -336,7 +326,7 @@ class InjectAnnotationAutowireContextTests {
} }
@Test @Test
void testAutowiredFieldDoesNotResolveCandidateWithDefaultValueAndConflictingValueOnBeanDefinition() { void autowiredFieldDoesNotResolveCandidateWithDefaultValueAndConflictingValueOnBeanDefinition() {
GenericApplicationContext context = new GenericApplicationContext(); GenericApplicationContext context = new GenericApplicationContext();
ConstructorArgumentValues cavs1 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs1 = new ConstructorArgumentValues();
cavs1.addGenericArgumentValue(JUERGEN); cavs1.addGenericArgumentValue(JUERGEN);
@ -346,21 +336,20 @@ class InjectAnnotationAutowireContextTests {
ConstructorArgumentValues cavs2 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs2 = new ConstructorArgumentValues();
cavs2.addGenericArgumentValue(MARK); cavs2.addGenericArgumentValue(MARK);
RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null); RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null);
context.registerBeanDefinition(JUERGEN, person1); context.registerBeanDefinition(PERSON1, person1);
context.registerBeanDefinition(MARK, person2); context.registerBeanDefinition(PERSON2, person2);
context.registerBeanDefinition("autowired", context.registerBeanDefinition("autowired", new RootBeanDefinition(QualifiedFieldWithDefaultValueTestBean.class));
new RootBeanDefinition(QualifiedFieldWithDefaultValueTestBean.class));
AnnotationConfigUtils.registerAnnotationConfigProcessors(context); AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
assertThatExceptionOfType(BeanCreationException.class).isThrownBy( assertThatExceptionOfType(BeanCreationException.class)
context::refresh) .isThrownBy(context::refresh)
.satisfies(ex -> { .satisfies(ex -> {
assertThat(ex.getRootCause()).isInstanceOf(NoSuchBeanDefinitionException.class); assertThat(ex.getRootCause()).isInstanceOf(NoSuchBeanDefinitionException.class);
assertThat(ex.getBeanName()).isEqualTo("autowired"); assertThat(ex.getBeanName()).isEqualTo("autowired");
}); });
} }
@Test @Test
void testAutowiredFieldResolvesWithDefaultValueAndExplicitDefaultValueOnBeanDefinition() { void autowiredFieldResolvesWithDefaultValueAndExplicitDefaultValueOnBeanDefinition() {
GenericApplicationContext context = new GenericApplicationContext(); GenericApplicationContext context = new GenericApplicationContext();
ConstructorArgumentValues cavs1 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs1 = new ConstructorArgumentValues();
cavs1.addGenericArgumentValue(JUERGEN); cavs1.addGenericArgumentValue(JUERGEN);
@ -370,10 +359,9 @@ class InjectAnnotationAutowireContextTests {
ConstructorArgumentValues cavs2 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs2 = new ConstructorArgumentValues();
cavs2.addGenericArgumentValue(MARK); cavs2.addGenericArgumentValue(MARK);
RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null); RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null);
context.registerBeanDefinition(JUERGEN, person1); context.registerBeanDefinition(PERSON1, person1);
context.registerBeanDefinition(MARK, person2); context.registerBeanDefinition(PERSON2, person2);
context.registerBeanDefinition("autowired", context.registerBeanDefinition("autowired", new RootBeanDefinition(QualifiedFieldWithDefaultValueTestBean.class));
new RootBeanDefinition(QualifiedFieldWithDefaultValueTestBean.class));
AnnotationConfigUtils.registerAnnotationConfigProcessors(context); AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
context.refresh(); context.refresh();
QualifiedFieldWithDefaultValueTestBean bean = QualifiedFieldWithDefaultValueTestBean bean =
@ -382,7 +370,7 @@ class InjectAnnotationAutowireContextTests {
} }
@Test @Test
void testAutowiredFieldResolvesWithMultipleQualifierValues() { void autowiredFieldResolvesWithMultipleQualifierValues() {
GenericApplicationContext context = new GenericApplicationContext(); GenericApplicationContext context = new GenericApplicationContext();
ConstructorArgumentValues cavs1 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs1 = new ConstructorArgumentValues();
cavs1.addGenericArgumentValue(JUERGEN); cavs1.addGenericArgumentValue(JUERGEN);
@ -396,10 +384,9 @@ class InjectAnnotationAutowireContextTests {
AutowireCandidateQualifier qualifier2 = new AutowireCandidateQualifier(TestQualifierWithMultipleAttributes.class); AutowireCandidateQualifier qualifier2 = new AutowireCandidateQualifier(TestQualifierWithMultipleAttributes.class);
qualifier2.setAttribute("number", 123); qualifier2.setAttribute("number", 123);
person2.addQualifier(qualifier2); person2.addQualifier(qualifier2);
context.registerBeanDefinition(JUERGEN, person1); context.registerBeanDefinition(PERSON1, person1);
context.registerBeanDefinition(MARK, person2); context.registerBeanDefinition(PERSON2, person2);
context.registerBeanDefinition("autowired", context.registerBeanDefinition("autowired", new RootBeanDefinition(QualifiedFieldWithMultipleAttributesTestBean.class));
new RootBeanDefinition(QualifiedFieldWithMultipleAttributesTestBean.class));
AnnotationConfigUtils.registerAnnotationConfigProcessors(context); AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
context.refresh(); context.refresh();
QualifiedFieldWithMultipleAttributesTestBean bean = QualifiedFieldWithMultipleAttributesTestBean bean =
@ -408,7 +395,7 @@ class InjectAnnotationAutowireContextTests {
} }
@Test @Test
void testAutowiredFieldDoesNotResolveWithMultipleQualifierValuesAndConflictingDefaultValue() { void autowiredFieldDoesNotResolveWithMultipleQualifierValuesAndConflictingDefaultValue() {
GenericApplicationContext context = new GenericApplicationContext(); GenericApplicationContext context = new GenericApplicationContext();
ConstructorArgumentValues cavs1 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs1 = new ConstructorArgumentValues();
cavs1.addGenericArgumentValue(JUERGEN); cavs1.addGenericArgumentValue(JUERGEN);
@ -423,21 +410,20 @@ class InjectAnnotationAutowireContextTests {
qualifier2.setAttribute("number", 123); qualifier2.setAttribute("number", 123);
qualifier2.setAttribute("value", "not the default"); qualifier2.setAttribute("value", "not the default");
person2.addQualifier(qualifier2); person2.addQualifier(qualifier2);
context.registerBeanDefinition(JUERGEN, person1); context.registerBeanDefinition(PERSON1, person1);
context.registerBeanDefinition(MARK, person2); context.registerBeanDefinition(PERSON2, person2);
context.registerBeanDefinition("autowired", context.registerBeanDefinition("autowired", new RootBeanDefinition(QualifiedFieldWithMultipleAttributesTestBean.class));
new RootBeanDefinition(QualifiedFieldWithMultipleAttributesTestBean.class));
AnnotationConfigUtils.registerAnnotationConfigProcessors(context); AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
assertThatExceptionOfType(BeanCreationException.class).isThrownBy( assertThatExceptionOfType(BeanCreationException.class)
context::refresh) .isThrownBy(context::refresh)
.satisfies(ex -> { .satisfies(ex -> {
assertThat(ex.getRootCause()).isInstanceOf(NoSuchBeanDefinitionException.class); assertThat(ex.getRootCause()).isInstanceOf(NoSuchBeanDefinitionException.class);
assertThat(ex.getBeanName()).isEqualTo("autowired"); assertThat(ex.getBeanName()).isEqualTo("autowired");
}); });
} }
@Test @Test
void testAutowiredFieldResolvesWithMultipleQualifierValuesAndExplicitDefaultValue() { void autowiredFieldResolvesWithMultipleQualifierValuesAndExplicitDefaultValue() {
GenericApplicationContext context = new GenericApplicationContext(); GenericApplicationContext context = new GenericApplicationContext();
ConstructorArgumentValues cavs1 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs1 = new ConstructorArgumentValues();
cavs1.addGenericArgumentValue(JUERGEN); cavs1.addGenericArgumentValue(JUERGEN);
@ -452,10 +438,9 @@ class InjectAnnotationAutowireContextTests {
qualifier2.setAttribute("number", 123); qualifier2.setAttribute("number", 123);
qualifier2.setAttribute("value", "default"); qualifier2.setAttribute("value", "default");
person2.addQualifier(qualifier2); person2.addQualifier(qualifier2);
context.registerBeanDefinition(JUERGEN, person1); context.registerBeanDefinition(PERSON1, person1);
context.registerBeanDefinition(MARK, person2); context.registerBeanDefinition(PERSON2, person2);
context.registerBeanDefinition("autowired", context.registerBeanDefinition("autowired", new RootBeanDefinition(QualifiedFieldWithMultipleAttributesTestBean.class));
new RootBeanDefinition(QualifiedFieldWithMultipleAttributesTestBean.class));
AnnotationConfigUtils.registerAnnotationConfigProcessors(context); AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
context.refresh(); context.refresh();
QualifiedFieldWithMultipleAttributesTestBean bean = QualifiedFieldWithMultipleAttributesTestBean bean =
@ -464,7 +449,7 @@ class InjectAnnotationAutowireContextTests {
} }
@Test @Test
void testAutowiredFieldDoesNotResolveWithMultipleQualifierValuesAndMultipleMatchingCandidates() { void autowiredFieldDoesNotResolveWithMultipleQualifierValuesAndMultipleMatchingCandidates() {
GenericApplicationContext context = new GenericApplicationContext(); GenericApplicationContext context = new GenericApplicationContext();
ConstructorArgumentValues cavs1 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs1 = new ConstructorArgumentValues();
cavs1.addGenericArgumentValue(JUERGEN); cavs1.addGenericArgumentValue(JUERGEN);
@ -479,38 +464,37 @@ class InjectAnnotationAutowireContextTests {
qualifier2.setAttribute("number", 123); qualifier2.setAttribute("number", 123);
qualifier2.setAttribute("value", "default"); qualifier2.setAttribute("value", "default");
person2.addQualifier(qualifier2); person2.addQualifier(qualifier2);
context.registerBeanDefinition(JUERGEN, person1); context.registerBeanDefinition(PERSON1, person1);
context.registerBeanDefinition(MARK, person2); context.registerBeanDefinition(PERSON2, person2);
context.registerBeanDefinition("autowired", context.registerBeanDefinition("autowired", new RootBeanDefinition(QualifiedFieldWithMultipleAttributesTestBean.class));
new RootBeanDefinition(QualifiedFieldWithMultipleAttributesTestBean.class));
AnnotationConfigUtils.registerAnnotationConfigProcessors(context); AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
assertThatExceptionOfType(BeanCreationException.class).isThrownBy( assertThatExceptionOfType(BeanCreationException.class)
context::refresh) .isThrownBy(context::refresh)
.satisfies(ex -> { .satisfies(ex -> {
assertThat(ex.getRootCause()).isInstanceOf(NoSuchBeanDefinitionException.class); assertThat(ex.getRootCause()).isInstanceOf(NoSuchBeanDefinitionException.class);
assertThat(ex.getBeanName()).isEqualTo("autowired"); assertThat(ex.getBeanName()).isEqualTo("autowired");
}); });
} }
@Test @Test
void testAutowiredFieldDoesNotResolveWithBaseQualifierAndNonDefaultValueAndMultipleMatchingCandidates() { void autowiredConstructorArgumentDoesNotResolveWithBaseQualifierAndNonDefaultValueAndMultipleMatchingCandidates() {
GenericApplicationContext context = new GenericApplicationContext(); GenericApplicationContext context = new GenericApplicationContext();
ConstructorArgumentValues cavs1 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs1 = new ConstructorArgumentValues();
cavs1.addGenericArgumentValue("the real juergen"); cavs1.addGenericArgumentValue("the real juergen");
RootBeanDefinition person1 = new RootBeanDefinition(Person.class, cavs1, null); RootBeanDefinition person1 = new RootBeanDefinition(Person.class, cavs1, null);
person1.addQualifier(new AutowireCandidateQualifier(Qualifier.class, "juergen")); person1.addQualifier(new AutowireCandidateQualifier(Qualifier.class, JUERGEN));
ConstructorArgumentValues cavs2 = new ConstructorArgumentValues(); ConstructorArgumentValues cavs2 = new ConstructorArgumentValues();
cavs2.addGenericArgumentValue("juergen imposter"); cavs2.addGenericArgumentValue("juergen imposter");
RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null); RootBeanDefinition person2 = new RootBeanDefinition(Person.class, cavs2, null);
person2.addQualifier(new AutowireCandidateQualifier(Qualifier.class, "juergen")); person2.addQualifier(new AutowireCandidateQualifier(Qualifier.class, JUERGEN));
context.registerBeanDefinition("juergen1", person1); context.registerBeanDefinition("juergen1", person1);
context.registerBeanDefinition("juergen2", person2); context.registerBeanDefinition("juergen2", person2);
context.registerBeanDefinition("autowired", context.registerBeanDefinition("autowired",
new RootBeanDefinition(QualifiedConstructorArgumentWithBaseQualifierNonDefaultValueTestBean.class)); new RootBeanDefinition(QualifiedConstructorArgumentWithBaseQualifierNonDefaultValueTestBean.class));
AnnotationConfigUtils.registerAnnotationConfigProcessors(context); AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
assertThatExceptionOfType(UnsatisfiedDependencyException.class).isThrownBy( assertThatExceptionOfType(UnsatisfiedDependencyException.class)
context::refresh) .isThrownBy(context::refresh)
.satisfies(ex -> assertThat(ex.getBeanName()).isEqualTo("autowired")); .satisfies(ex -> assertThat(ex.getBeanName()).isEqualTo("autowired"));
} }
@ -543,7 +527,7 @@ class InjectAnnotationAutowireContextTests {
private static class QualifiedConstructorArgumentTestBean { private static class QualifiedConstructorArgumentTestBean {
private Person person; private final Person person;
@Inject @Inject
public QualifiedConstructorArgumentTestBean(@TestQualifier Person person) { public QualifiedConstructorArgumentTestBean(@TestQualifier Person person) {
@ -593,13 +577,13 @@ class InjectAnnotationAutowireContextTests {
} }
public static class QualifiedConstructorArgumentWithBaseQualifierNonDefaultValueTestBean { static class QualifiedConstructorArgumentWithBaseQualifierNonDefaultValueTestBean {
private Person person; private Person person;
@Inject @Inject
public QualifiedConstructorArgumentWithBaseQualifierNonDefaultValueTestBean( public QualifiedConstructorArgumentWithBaseQualifierNonDefaultValueTestBean(
@Named("juergen") Person person) { @Named(JUERGEN) Person person) {
this.person = person; this.person = person;
} }