@@ -372,66 +372,103 @@ public void testObjectFactoryInjection() {
372372 AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor ();
373373 bpp .setBeanFactory (bf );
374374 bf .addBeanPostProcessor (bpp );
375- bf .registerBeanDefinition ("annotatedBean" , new RootBeanDefinition (ObjectFactoryQualifierInjectionBean .class ));
375+ bf .registerBeanDefinition ("annotatedBean" , new RootBeanDefinition (ObjectFactoryQualifierFieldInjectionBean .class ));
376376 RootBeanDefinition bd = new RootBeanDefinition (TestBean .class );
377377 bd .addQualifier (new AutowireCandidateQualifier (Qualifier .class , "testBean" ));
378378 bf .registerBeanDefinition ("testBean" , bd );
379379 bf .registerBeanDefinition ("testBean2" , new RootBeanDefinition (TestBean .class ));
380380
381- ObjectFactoryQualifierInjectionBean bean = (ObjectFactoryQualifierInjectionBean ) bf .getBean ("annotatedBean" );
381+ ObjectFactoryQualifierFieldInjectionBean bean = (ObjectFactoryQualifierFieldInjectionBean ) bf .getBean ("annotatedBean" );
382382 assertSame (bf .getBean ("testBean" ), bean .getTestBean ());
383383 bf .destroySingletons ();
384384 }
385385
386386 @ Test
387- public void testObjectFactoryInjectionIntoPrototypeBean () {
387+ public void testObjectFactoryQualifierInjection () {
388+ DefaultListableBeanFactory bf = new DefaultListableBeanFactory ();
389+ AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor ();
390+ bpp .setBeanFactory (bf );
391+ bf .addBeanPostProcessor (bpp );
392+ bf .registerBeanDefinition ("annotatedBean" , new RootBeanDefinition (ObjectFactoryQualifierFieldInjectionBean .class ));
393+ RootBeanDefinition bd = new RootBeanDefinition (TestBean .class );
394+ bd .addQualifier (new AutowireCandidateQualifier (Qualifier .class , "testBean" ));
395+ bf .registerBeanDefinition ("testBean" , bd );
396+
397+ ObjectFactoryQualifierFieldInjectionBean bean = (ObjectFactoryQualifierFieldInjectionBean ) bf .getBean ("annotatedBean" );
398+ assertSame (bf .getBean ("testBean" ), bean .getTestBean ());
399+ bf .destroySingletons ();
400+ }
401+
402+ @ Test
403+ public void testObjectFactoryFieldInjectionIntoPrototypeBean () {
388404 DefaultListableBeanFactory bf = new DefaultListableBeanFactory ();
389405 bf .setAutowireCandidateResolver (new QualifierAnnotationAutowireCandidateResolver ());
390406 AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor ();
391407 bpp .setBeanFactory (bf );
392408 bf .addBeanPostProcessor (bpp );
393- bf .registerBeanDefinition ("annotatedBean" , new RootBeanDefinition (ObjectFactoryQualifierInjectionBean .class , false ));
409+ bf .registerBeanDefinition ("annotatedBean" , new RootBeanDefinition (ObjectFactoryQualifierFieldInjectionBean .class , false ));
394410 RootBeanDefinition bd = new RootBeanDefinition (TestBean .class );
395411 bd .addQualifier (new AutowireCandidateQualifier (Qualifier .class , "testBean" ));
396412 bf .registerBeanDefinition ("testBean" , bd );
397413 bf .registerBeanDefinition ("testBean2" , new RootBeanDefinition (TestBean .class ));
398414
399- ObjectFactoryQualifierInjectionBean bean = (ObjectFactoryQualifierInjectionBean ) bf .getBean ("annotatedBean" );
415+ ObjectFactoryQualifierFieldInjectionBean bean = (ObjectFactoryQualifierFieldInjectionBean ) bf .getBean ("annotatedBean" );
400416 assertSame (bf .getBean ("testBean" ), bean .getTestBean ());
401- ObjectFactoryQualifierInjectionBean anotherBean = (ObjectFactoryQualifierInjectionBean ) bf .getBean ("annotatedBean" );
417+ ObjectFactoryQualifierFieldInjectionBean anotherBean = (ObjectFactoryQualifierFieldInjectionBean ) bf .getBean ("annotatedBean" );
402418 assertNotSame (anotherBean , bean );
403419 assertSame (bf .getBean ("testBean" ), bean .getTestBean ());
404420 }
405421
406422 @ Test
407- public void testObjectFactoryQualifierInjection () {
423+ public void testObjectFactoryMethodInjectionIntoPrototypeBean () {
408424 DefaultListableBeanFactory bf = new DefaultListableBeanFactory ();
425+ bf .setAutowireCandidateResolver (new QualifierAnnotationAutowireCandidateResolver ());
409426 AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor ();
410427 bpp .setBeanFactory (bf );
411428 bf .addBeanPostProcessor (bpp );
412- bf .registerBeanDefinition ("annotatedBean" , new RootBeanDefinition (ObjectFactoryQualifierInjectionBean .class ));
429+ bf .registerBeanDefinition ("annotatedBean" , new RootBeanDefinition (ObjectFactoryQualifierMethodInjectionBean .class , false ));
413430 RootBeanDefinition bd = new RootBeanDefinition (TestBean .class );
414431 bd .addQualifier (new AutowireCandidateQualifier (Qualifier .class , "testBean" ));
415432 bf .registerBeanDefinition ("testBean" , bd );
433+ bf .registerBeanDefinition ("testBean2" , new RootBeanDefinition (TestBean .class ));
434+
435+ ObjectFactoryQualifierMethodInjectionBean bean = (ObjectFactoryQualifierMethodInjectionBean ) bf .getBean ("annotatedBean" );
436+ assertSame (bf .getBean ("testBean" ), bean .getTestBean ());
437+ ObjectFactoryQualifierMethodInjectionBean anotherBean = (ObjectFactoryQualifierMethodInjectionBean ) bf .getBean ("annotatedBean" );
438+ assertNotSame (anotherBean , bean );
439+ assertSame (bf .getBean ("testBean" ), bean .getTestBean ());
440+ }
441+
442+ @ Test
443+ public void testObjectFactoryWithBeanField () throws Exception {
444+ DefaultListableBeanFactory bf = new DefaultListableBeanFactory ();
445+ AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor ();
446+ bpp .setBeanFactory (bf );
447+ bf .addBeanPostProcessor (bpp );
448+ bf .registerBeanDefinition ("annotatedBean" , new RootBeanDefinition (ObjectFactoryFieldInjectionBean .class ));
449+ bf .registerBeanDefinition ("testBean" , new RootBeanDefinition (TestBean .class ));
450+ bf .setSerializationId ("test" );
416451
417- ObjectFactoryQualifierInjectionBean bean = (ObjectFactoryQualifierInjectionBean ) bf .getBean ("annotatedBean" );
452+ ObjectFactoryFieldInjectionBean bean = (ObjectFactoryFieldInjectionBean ) bf .getBean ("annotatedBean" );
453+ assertSame (bf .getBean ("testBean" ), bean .getTestBean ());
454+ bean = (ObjectFactoryFieldInjectionBean ) SerializationTestUtils .serializeAndDeserialize (bean );
418455 assertSame (bf .getBean ("testBean" ), bean .getTestBean ());
419456 bf .destroySingletons ();
420457 }
421458
422459 @ Test
423- public void testObjectFactorySerialization () throws Exception {
460+ public void testObjectFactoryWithBeanMethod () throws Exception {
424461 DefaultListableBeanFactory bf = new DefaultListableBeanFactory ();
425462 AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor ();
426463 bpp .setBeanFactory (bf );
427464 bf .addBeanPostProcessor (bpp );
428- bf .registerBeanDefinition ("annotatedBean" , new RootBeanDefinition (ObjectFactoryInjectionBean .class ));
465+ bf .registerBeanDefinition ("annotatedBean" , new RootBeanDefinition (ObjectFactoryMethodInjectionBean .class ));
429466 bf .registerBeanDefinition ("testBean" , new RootBeanDefinition (TestBean .class ));
430467 bf .setSerializationId ("test" );
431468
432- ObjectFactoryInjectionBean bean = (ObjectFactoryInjectionBean ) bf .getBean ("annotatedBean" );
469+ ObjectFactoryMethodInjectionBean bean = (ObjectFactoryMethodInjectionBean ) bf .getBean ("annotatedBean" );
433470 assertSame (bf .getBean ("testBean" ), bean .getTestBean ());
434- bean = (ObjectFactoryInjectionBean ) SerializationTestUtils .serializeAndDeserialize (bean );
471+ bean = (ObjectFactoryMethodInjectionBean ) SerializationTestUtils .serializeAndDeserialize (bean );
435472 assertSame (bf .getBean ("testBean" ), bean .getTestBean ());
436473 bf .destroySingletons ();
437474 }
@@ -901,7 +938,7 @@ public Map<String, TestBean> getTestBeanMap() {
901938 }
902939
903940
904- public static class ObjectFactoryInjectionBean implements Serializable {
941+ public static class ObjectFactoryFieldInjectionBean implements Serializable {
905942
906943 @ Inject
907944 private Provider <TestBean > testBeanFactory ;
@@ -912,7 +949,22 @@ public TestBean getTestBean() {
912949 }
913950
914951
915- public static class ObjectFactoryQualifierInjectionBean {
952+ public static class ObjectFactoryMethodInjectionBean implements Serializable {
953+
954+ private Provider <TestBean > testBeanFactory ;
955+
956+ @ Inject
957+ public void setTestBeanFactory (Provider <TestBean > testBeanFactory ) {
958+ this .testBeanFactory = testBeanFactory ;
959+ }
960+
961+ public TestBean getTestBean () {
962+ return this .testBeanFactory .get ();
963+ }
964+ }
965+
966+
967+ public static class ObjectFactoryQualifierFieldInjectionBean {
916968
917969 @ Inject
918970 @ Named ("testBean" )
@@ -924,6 +976,22 @@ public TestBean getTestBean() {
924976 }
925977
926978
979+ public static class ObjectFactoryQualifierMethodInjectionBean {
980+
981+ private Provider <?> testBeanFactory ;
982+
983+ @ Inject
984+ @ Named ("testBean" )
985+ public void setTestBeanFactory (Provider <?> testBeanFactory ) {
986+ this .testBeanFactory = testBeanFactory ;
987+ }
988+
989+ public TestBean getTestBean () {
990+ return (TestBean ) this .testBeanFactory .get ();
991+ }
992+ }
993+
994+
927995 public static class ObjectFactoryListFieldInjectionBean implements Serializable {
928996
929997 @ Inject
0 commit comments