AutowiredAnnotationBeanPostProcessor tolerates annotated no-arg constructors
Issue: SPR-15005
This commit is contained in:
parent
b825528d01
commit
8b5ee4ef91
|
@ -305,10 +305,6 @@ public class AutowiredAnnotationBeanPostProcessor extends InstantiationAwareBean
|
||||||
". Found constructor with 'required' Autowired annotation already: " +
|
". Found constructor with 'required' Autowired annotation already: " +
|
||||||
requiredConstructor);
|
requiredConstructor);
|
||||||
}
|
}
|
||||||
if (candidate.getParameterCount() == 0) {
|
|
||||||
throw new IllegalStateException(
|
|
||||||
"Autowired annotation requires at least one argument: " + candidate);
|
|
||||||
}
|
|
||||||
boolean required = determineRequiredStatus(ann);
|
boolean required = determineRequiredStatus(ann);
|
||||||
if (required) {
|
if (required) {
|
||||||
if (!candidates.isEmpty()) {
|
if (!candidates.isEmpty()) {
|
||||||
|
|
|
@ -2184,6 +2184,15 @@ public class AutowiredAnnotationBeanPostProcessorTests {
|
||||||
assertNotNull(bf.getBean(ProvidedArgumentBean.class));
|
assertNotNull(bf.getBean(ProvidedArgumentBean.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAnnotatedDefaultConstructor() {
|
||||||
|
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||||
|
bf.addBeanPostProcessor(new AutowiredAnnotationBeanPostProcessor());
|
||||||
|
bf.registerBeanDefinition("annotatedBean", new RootBeanDefinition(AnnotatedDefaultConstructorBean.class));
|
||||||
|
|
||||||
|
assertNotNull(bf.getBean("annotatedBean"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public static class ResourceInjectionBean {
|
public static class ResourceInjectionBean {
|
||||||
|
|
||||||
|
@ -3411,7 +3420,14 @@ public class AutowiredAnnotationBeanPostProcessorTests {
|
||||||
tbs.add(new TestBean("tb2"));
|
tbs.add(new TestBean("tb2"));
|
||||||
return tbs;
|
return tbs;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static class AnnotatedDefaultConstructorBean {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public AnnotatedDefaultConstructorBean() {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2014 the original author or authors.
|
* Copyright 2002-2016 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -742,6 +742,15 @@ public class InjectAnnotationBeanPostProcessorTests {
|
||||||
bf.destroySingletons();
|
bf.destroySingletons();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAnnotatedDefaultConstructor() {
|
||||||
|
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||||
|
bf.addBeanPostProcessor(new AutowiredAnnotationBeanPostProcessor());
|
||||||
|
bf.registerBeanDefinition("annotatedBean", new RootBeanDefinition(AnnotatedDefaultConstructorBean.class));
|
||||||
|
|
||||||
|
assertNotNull(bf.getBean("annotatedBean"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public static class ResourceInjectionBean {
|
public static class ResourceInjectionBean {
|
||||||
|
|
||||||
|
@ -750,7 +759,6 @@ public class InjectAnnotationBeanPostProcessorTests {
|
||||||
|
|
||||||
private TestBean testBean2;
|
private TestBean testBean2;
|
||||||
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public void setTestBean2(TestBean testBean2) {
|
public void setTestBean2(TestBean testBean2) {
|
||||||
if (this.testBean2 != null) {
|
if (this.testBean2 != null) {
|
||||||
|
@ -819,7 +827,6 @@ public class InjectAnnotationBeanPostProcessorTests {
|
||||||
|
|
||||||
|
|
||||||
public static class TypedExtendedResourceInjectionBean extends ExtendedResourceInjectionBean<NestedTestBean> {
|
public static class TypedExtendedResourceInjectionBean extends ExtendedResourceInjectionBean<NestedTestBean> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1087,7 +1094,6 @@ public class InjectAnnotationBeanPostProcessorTests {
|
||||||
@Inject
|
@Inject
|
||||||
private Map<String, TestBean> testBeanMap;
|
private Map<String, TestBean> testBeanMap;
|
||||||
|
|
||||||
|
|
||||||
public Map<String, TestBean> getTestBeanMap() {
|
public Map<String, TestBean> getTestBeanMap() {
|
||||||
return this.testBeanMap;
|
return this.testBeanMap;
|
||||||
}
|
}
|
||||||
|
@ -1346,4 +1352,12 @@ public class InjectAnnotationBeanPostProcessorTests {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static class AnnotatedDefaultConstructorBean {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public AnnotatedDefaultConstructorBean() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue