Test for ObjectFactory injection at constructor level
Issue: SPR-15222
This commit is contained in:
parent
448ea4cdfe
commit
65d8d698cd
|
@ -1077,15 +1077,29 @@ public class AutowiredAnnotationBeanPostProcessorTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testObjectFactoryInjection() {
|
public void testObjectFactoryFieldInjection() {
|
||||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||||
AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor();
|
AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor();
|
||||||
bpp.setBeanFactory(bf);
|
bpp.setBeanFactory(bf);
|
||||||
bf.addBeanPostProcessor(bpp);
|
bf.addBeanPostProcessor(bpp);
|
||||||
bf.registerBeanDefinition("annotatedBean", new RootBeanDefinition(ObjectFactoryInjectionBean.class));
|
bf.registerBeanDefinition("annotatedBean", new RootBeanDefinition(ObjectFactoryFieldInjectionBean.class));
|
||||||
bf.registerBeanDefinition("testBean", new RootBeanDefinition(TestBean.class));
|
bf.registerBeanDefinition("testBean", new RootBeanDefinition(TestBean.class));
|
||||||
|
|
||||||
ObjectFactoryInjectionBean bean = (ObjectFactoryInjectionBean) bf.getBean("annotatedBean");
|
ObjectFactoryFieldInjectionBean bean = (ObjectFactoryFieldInjectionBean) bf.getBean("annotatedBean");
|
||||||
|
assertSame(bf.getBean("testBean"), bean.getTestBean());
|
||||||
|
bf.destroySingletons();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testObjectFactoryConstructorInjection() {
|
||||||
|
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||||
|
AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor();
|
||||||
|
bpp.setBeanFactory(bf);
|
||||||
|
bf.addBeanPostProcessor(bpp);
|
||||||
|
bf.registerBeanDefinition("annotatedBean", new RootBeanDefinition(ObjectFactoryConstructorInjectionBean.class));
|
||||||
|
bf.registerBeanDefinition("testBean", new RootBeanDefinition(TestBean.class));
|
||||||
|
|
||||||
|
ObjectFactoryConstructorInjectionBean bean = (ObjectFactoryConstructorInjectionBean) bf.getBean("annotatedBean");
|
||||||
assertSame(bf.getBean("testBean"), bean.getTestBean());
|
assertSame(bf.getBean("testBean"), bean.getTestBean());
|
||||||
bf.destroySingletons();
|
bf.destroySingletons();
|
||||||
}
|
}
|
||||||
|
@ -1096,14 +1110,14 @@ public class AutowiredAnnotationBeanPostProcessorTests {
|
||||||
AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor();
|
AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor();
|
||||||
bpp.setBeanFactory(bf);
|
bpp.setBeanFactory(bf);
|
||||||
bf.addBeanPostProcessor(bpp);
|
bf.addBeanPostProcessor(bpp);
|
||||||
RootBeanDefinition annotatedBeanDefinition = new RootBeanDefinition(ObjectFactoryInjectionBean.class);
|
RootBeanDefinition annotatedBeanDefinition = new RootBeanDefinition(ObjectFactoryFieldInjectionBean.class);
|
||||||
annotatedBeanDefinition.setScope(BeanDefinition.SCOPE_PROTOTYPE);
|
annotatedBeanDefinition.setScope(BeanDefinition.SCOPE_PROTOTYPE);
|
||||||
bf.registerBeanDefinition("annotatedBean", annotatedBeanDefinition);
|
bf.registerBeanDefinition("annotatedBean", annotatedBeanDefinition);
|
||||||
bf.registerBeanDefinition("testBean", new RootBeanDefinition(TestBean.class));
|
bf.registerBeanDefinition("testBean", new RootBeanDefinition(TestBean.class));
|
||||||
|
|
||||||
ObjectFactoryInjectionBean bean = (ObjectFactoryInjectionBean) bf.getBean("annotatedBean");
|
ObjectFactoryFieldInjectionBean bean = (ObjectFactoryFieldInjectionBean) bf.getBean("annotatedBean");
|
||||||
assertSame(bf.getBean("testBean"), bean.getTestBean());
|
assertSame(bf.getBean("testBean"), bean.getTestBean());
|
||||||
ObjectFactoryInjectionBean anotherBean = (ObjectFactoryInjectionBean) bf.getBean("annotatedBean");
|
ObjectFactoryFieldInjectionBean anotherBean = (ObjectFactoryFieldInjectionBean) bf.getBean("annotatedBean");
|
||||||
assertNotSame(anotherBean, bean);
|
assertNotSame(anotherBean, bean);
|
||||||
assertSame(bf.getBean("testBean"), anotherBean.getTestBean());
|
assertSame(bf.getBean("testBean"), anotherBean.getTestBean());
|
||||||
}
|
}
|
||||||
|
@ -1153,13 +1167,13 @@ public class AutowiredAnnotationBeanPostProcessorTests {
|
||||||
AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor();
|
AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor();
|
||||||
bpp.setBeanFactory(bf);
|
bpp.setBeanFactory(bf);
|
||||||
bf.addBeanPostProcessor(bpp);
|
bf.addBeanPostProcessor(bpp);
|
||||||
bf.registerBeanDefinition("annotatedBean", new RootBeanDefinition(ObjectFactoryInjectionBean.class));
|
bf.registerBeanDefinition("annotatedBean", new RootBeanDefinition(ObjectFactoryFieldInjectionBean.class));
|
||||||
bf.registerBeanDefinition("testBean", new RootBeanDefinition(TestBean.class));
|
bf.registerBeanDefinition("testBean", new RootBeanDefinition(TestBean.class));
|
||||||
bf.setSerializationId("test");
|
bf.setSerializationId("test");
|
||||||
|
|
||||||
ObjectFactoryInjectionBean bean = (ObjectFactoryInjectionBean) bf.getBean("annotatedBean");
|
ObjectFactoryFieldInjectionBean bean = (ObjectFactoryFieldInjectionBean) bf.getBean("annotatedBean");
|
||||||
assertSame(bf.getBean("testBean"), bean.getTestBean());
|
assertSame(bf.getBean("testBean"), bean.getTestBean());
|
||||||
bean = (ObjectFactoryInjectionBean) SerializationTestUtils.serializeAndDeserialize(bean);
|
bean = (ObjectFactoryFieldInjectionBean) SerializationTestUtils.serializeAndDeserialize(bean);
|
||||||
assertSame(bf.getBean("testBean"), bean.getTestBean());
|
assertSame(bf.getBean("testBean"), bean.getTestBean());
|
||||||
bf.destroySingletons();
|
bf.destroySingletons();
|
||||||
}
|
}
|
||||||
|
@ -2838,7 +2852,7 @@ public class AutowiredAnnotationBeanPostProcessorTests {
|
||||||
|
|
||||||
|
|
||||||
@SuppressWarnings("serial")
|
@SuppressWarnings("serial")
|
||||||
public static class ObjectFactoryInjectionBean implements Serializable {
|
public static class ObjectFactoryFieldInjectionBean implements Serializable {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ObjectFactory<TestBean> testBeanFactory;
|
private ObjectFactory<TestBean> testBeanFactory;
|
||||||
|
@ -2849,6 +2863,21 @@ public class AutowiredAnnotationBeanPostProcessorTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@SuppressWarnings("serial")
|
||||||
|
public static class ObjectFactoryConstructorInjectionBean implements Serializable {
|
||||||
|
|
||||||
|
private final ObjectFactory<TestBean> testBeanFactory;
|
||||||
|
|
||||||
|
public ObjectFactoryConstructorInjectionBean(ObjectFactory<TestBean> testBeanFactory) {
|
||||||
|
this.testBeanFactory = testBeanFactory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TestBean getTestBean() {
|
||||||
|
return this.testBeanFactory.getObject();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public static class ObjectFactoryQualifierInjectionBean {
|
public static class ObjectFactoryQualifierInjectionBean {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
|
|
Loading…
Reference in New Issue