|
1 | 1 | /* |
2 | | - * Copyright 2002-2014 the original author or authors. |
| 2 | + * Copyright 2002-2015 the original author or authors. |
3 | 3 | * |
4 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | 5 | * you may not use this file except in compliance with the License. |
@@ -556,6 +556,38 @@ public void testConstructorResourceInjection() { |
556 | 556 | assertSame(bf, bean.getBeanFactory()); |
557 | 557 | } |
558 | 558 |
|
| 559 | + @Test |
| 560 | + public void testConstructorResourceInjectionWithNull() { |
| 561 | + DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); |
| 562 | + bf.registerResolvableDependency(BeanFactory.class, bf); |
| 563 | + AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor(); |
| 564 | + bpp.setBeanFactory(bf); |
| 565 | + bf.addBeanPostProcessor(bpp); |
| 566 | + RootBeanDefinition bd = new RootBeanDefinition(ConstructorResourceInjectionBean.class); |
| 567 | + bd.setScope(RootBeanDefinition.SCOPE_PROTOTYPE); |
| 568 | + bf.registerBeanDefinition("annotatedBean", bd); |
| 569 | + TestBean tb = new TestBean(); |
| 570 | + bf.registerSingleton("testBean", tb); |
| 571 | + bf.registerBeanDefinition("nestedTestBean", new RootBeanDefinition(NullNestedTestBeanFactoryBean.class)); |
| 572 | + bf.registerSingleton("nestedTestBean2", new NestedTestBean()); |
| 573 | + |
| 574 | + ConstructorResourceInjectionBean bean = (ConstructorResourceInjectionBean) bf.getBean("annotatedBean"); |
| 575 | + assertSame(tb, bean.getTestBean()); |
| 576 | + assertSame(tb, bean.getTestBean2()); |
| 577 | + assertSame(tb, bean.getTestBean3()); |
| 578 | + assertSame(tb, bean.getTestBean4()); |
| 579 | + assertNull(bean.getNestedTestBean()); |
| 580 | + assertSame(bf, bean.getBeanFactory()); |
| 581 | + |
| 582 | + bean = (ConstructorResourceInjectionBean) bf.getBean("annotatedBean"); |
| 583 | + assertSame(tb, bean.getTestBean()); |
| 584 | + assertSame(tb, bean.getTestBean2()); |
| 585 | + assertSame(tb, bean.getTestBean3()); |
| 586 | + assertSame(tb, bean.getTestBean4()); |
| 587 | + assertNull(bean.getNestedTestBean()); |
| 588 | + assertSame(bf, bean.getBeanFactory()); |
| 589 | + } |
| 590 | + |
559 | 591 | @Test |
560 | 592 | public void testConstructorResourceInjectionWithMultipleCandidates() { |
561 | 593 | DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); |
@@ -2869,4 +2901,23 @@ public void setObj(MyCallable obj) { |
2869 | 2901 | } |
2870 | 2902 | } |
2871 | 2903 |
|
| 2904 | + |
| 2905 | + public static class NullNestedTestBeanFactoryBean implements FactoryBean<NestedTestBean> { |
| 2906 | + |
| 2907 | + @Override |
| 2908 | + public NestedTestBean getObject() { |
| 2909 | + return null; |
| 2910 | + } |
| 2911 | + |
| 2912 | + @Override |
| 2913 | + public Class<?> getObjectType() { |
| 2914 | + return NestedTestBean.class; |
| 2915 | + } |
| 2916 | + |
| 2917 | + @Override |
| 2918 | + public boolean isSingleton() { |
| 2919 | + return true; |
| 2920 | + } |
| 2921 | + } |
| 2922 | + |
2872 | 2923 | } |
0 commit comments