@@ -571,6 +571,10 @@ public void genericsBasedInjectionWithEarlyGenericsMatching() {
571
571
beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
572
572
assertEquals (1 , beanNames .length );
573
573
assertEquals ("stringRepo" , beanNames [0 ]);
574
+
575
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
576
+ assertEquals (1 , beanNames .length );
577
+ assertEquals ("stringRepo" , beanNames [0 ]);
574
578
}
575
579
576
580
@ Test
@@ -585,6 +589,78 @@ public void genericsBasedInjectionWithLateGenericsMatching() {
585
589
beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
586
590
assertEquals (1 , beanNames .length );
587
591
assertEquals ("stringRepo" , beanNames [0 ]);
592
+
593
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
594
+ assertEquals (1 , beanNames .length );
595
+ assertEquals ("stringRepo" , beanNames [0 ]);
596
+ }
597
+
598
+ @ Test
599
+ public void genericsBasedInjectionWithEarlyGenericsMatchingAndRawFactoryMethod () {
600
+ beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawFactoryMethodRepositoryConfiguration .class ));
601
+ new ConfigurationClassPostProcessor ().postProcessBeanFactory (beanFactory );
602
+
603
+ String [] beanNames = beanFactory .getBeanNamesForType (Repository .class );
604
+ assertTrue (ObjectUtils .containsElement (beanNames , "stringRepo" ));
605
+
606
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
607
+ assertEquals (0 , beanNames .length );
608
+
609
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
610
+ assertEquals (0 , beanNames .length );
611
+ }
612
+
613
+ @ Test
614
+ public void genericsBasedInjectionWithLateGenericsMatchingAndRawFactoryMethod () {
615
+ beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawFactoryMethodRepositoryConfiguration .class ));
616
+ new ConfigurationClassPostProcessor ().postProcessBeanFactory (beanFactory );
617
+ beanFactory .preInstantiateSingletons ();
618
+
619
+ String [] beanNames = beanFactory .getBeanNamesForType (Repository .class );
620
+ assertTrue (ObjectUtils .containsElement (beanNames , "stringRepo" ));
621
+
622
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
623
+ assertEquals (1 , beanNames .length );
624
+ assertEquals ("stringRepo" , beanNames [0 ]);
625
+
626
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
627
+ assertEquals (1 , beanNames .length );
628
+ assertEquals ("stringRepo" , beanNames [0 ]);
629
+ }
630
+
631
+ @ Test
632
+ public void genericsBasedInjectionWithEarlyGenericsMatchingAndRawInstance () {
633
+ beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawInstanceRepositoryConfiguration .class ));
634
+ new ConfigurationClassPostProcessor ().postProcessBeanFactory (beanFactory );
635
+
636
+ String [] beanNames = beanFactory .getBeanNamesForType (Repository .class );
637
+ assertTrue (ObjectUtils .containsElement (beanNames , "stringRepo" ));
638
+
639
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
640
+ assertEquals (1 , beanNames .length );
641
+ assertEquals ("stringRepo" , beanNames [0 ]);
642
+
643
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
644
+ assertEquals (1 , beanNames .length );
645
+ assertEquals ("stringRepo" , beanNames [0 ]);
646
+ }
647
+
648
+ @ Test
649
+ public void genericsBasedInjectionWithLateGenericsMatchingAndRawInstance () {
650
+ beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawInstanceRepositoryConfiguration .class ));
651
+ new ConfigurationClassPostProcessor ().postProcessBeanFactory (beanFactory );
652
+ beanFactory .preInstantiateSingletons ();
653
+
654
+ String [] beanNames = beanFactory .getBeanNamesForType (Repository .class );
655
+ assertTrue (ObjectUtils .containsElement (beanNames , "stringRepo" ));
656
+
657
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
658
+ assertEquals (1 , beanNames .length );
659
+ assertEquals ("stringRepo" , beanNames [0 ]);
660
+
661
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
662
+ assertEquals (1 , beanNames .length );
663
+ assertEquals ("stringRepo" , beanNames [0 ]);
588
664
}
589
665
590
666
@ Test
@@ -604,6 +680,10 @@ public void genericsBasedInjectionWithEarlyGenericsMatchingOnCglibProxy() {
604
680
assertEquals (1 , beanNames .length );
605
681
assertEquals ("stringRepo" , beanNames [0 ]);
606
682
683
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
684
+ assertEquals (1 , beanNames .length );
685
+ assertEquals ("stringRepo" , beanNames [0 ]);
686
+
607
687
assertTrue (AopUtils .isCglibProxy (beanFactory .getBean ("stringRepo" )));
608
688
}
609
689
@@ -625,12 +705,16 @@ public void genericsBasedInjectionWithLateGenericsMatchingOnCglibProxy() {
625
705
assertEquals (1 , beanNames .length );
626
706
assertEquals ("stringRepo" , beanNames [0 ]);
627
707
708
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
709
+ assertEquals (1 , beanNames .length );
710
+ assertEquals ("stringRepo" , beanNames [0 ]);
711
+
628
712
assertTrue (AopUtils .isCglibProxy (beanFactory .getBean ("stringRepo" )));
629
713
}
630
714
631
715
@ Test
632
716
public void genericsBasedInjectionWithLateGenericsMatchingOnCglibProxyAndRawFactoryMethod () {
633
- beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawRepositoryConfiguration .class ));
717
+ beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawFactoryMethodRepositoryConfiguration .class ));
634
718
new ConfigurationClassPostProcessor ().postProcessBeanFactory (beanFactory );
635
719
DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator ();
636
720
autoProxyCreator .setProxyTargetClass (true );
@@ -646,6 +730,35 @@ public void genericsBasedInjectionWithLateGenericsMatchingOnCglibProxyAndRawFact
646
730
assertEquals (1 , beanNames .length );
647
731
assertEquals ("stringRepo" , beanNames [0 ]);
648
732
733
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
734
+ assertEquals (1 , beanNames .length );
735
+ assertEquals ("stringRepo" , beanNames [0 ]);
736
+
737
+ assertTrue (AopUtils .isCglibProxy (beanFactory .getBean ("stringRepo" )));
738
+ }
739
+
740
+ @ Test
741
+ public void genericsBasedInjectionWithLateGenericsMatchingOnCglibProxyAndRawInstance () {
742
+ beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawInstanceRepositoryConfiguration .class ));
743
+ new ConfigurationClassPostProcessor ().postProcessBeanFactory (beanFactory );
744
+ DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator ();
745
+ autoProxyCreator .setProxyTargetClass (true );
746
+ autoProxyCreator .setBeanFactory (beanFactory );
747
+ beanFactory .addBeanPostProcessor (autoProxyCreator );
748
+ beanFactory .registerSingleton ("traceInterceptor" , new DefaultPointcutAdvisor (new SimpleTraceInterceptor ()));
749
+ beanFactory .preInstantiateSingletons ();
750
+
751
+ String [] beanNames = beanFactory .getBeanNamesForType (Repository .class );
752
+ assertTrue (ObjectUtils .containsElement (beanNames , "stringRepo" ));
753
+
754
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
755
+ assertEquals (1 , beanNames .length );
756
+ assertEquals ("stringRepo" , beanNames [0 ]);
757
+
758
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
759
+ assertEquals (1 , beanNames .length );
760
+ assertEquals ("stringRepo" , beanNames [0 ]);
761
+
649
762
assertTrue (AopUtils .isCglibProxy (beanFactory .getBean ("stringRepo" )));
650
763
}
651
764
@@ -665,6 +778,10 @@ public void genericsBasedInjectionWithEarlyGenericsMatchingOnJdkProxy() {
665
778
assertEquals (1 , beanNames .length );
666
779
assertEquals ("stringRepo" , beanNames [0 ]);
667
780
781
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (RepositoryInterface .class , String .class ));
782
+ assertEquals (1 , beanNames .length );
783
+ assertEquals ("stringRepo" , beanNames [0 ]);
784
+
668
785
assertTrue (AopUtils .isJdkDynamicProxy (beanFactory .getBean ("stringRepo" )));
669
786
}
670
787
@@ -685,12 +802,16 @@ public void genericsBasedInjectionWithLateGenericsMatchingOnJdkProxy() {
685
802
assertEquals (1 , beanNames .length );
686
803
assertEquals ("stringRepo" , beanNames [0 ]);
687
804
805
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (RepositoryInterface .class , String .class ));
806
+ assertEquals (1 , beanNames .length );
807
+ assertEquals ("stringRepo" , beanNames [0 ]);
808
+
688
809
assertTrue (AopUtils .isJdkDynamicProxy (beanFactory .getBean ("stringRepo" )));
689
810
}
690
811
691
812
@ Test
692
813
public void genericsBasedInjectionWithLateGenericsMatchingOnJdkProxyAndRawFactoryMethod () {
693
- beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawRepositoryConfiguration .class ));
814
+ beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawFactoryMethodRepositoryConfiguration .class ));
694
815
new ConfigurationClassPostProcessor ().postProcessBeanFactory (beanFactory );
695
816
DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator ();
696
817
autoProxyCreator .setBeanFactory (beanFactory );
@@ -705,6 +826,34 @@ public void genericsBasedInjectionWithLateGenericsMatchingOnJdkProxyAndRawFactor
705
826
assertEquals (1 , beanNames .length );
706
827
assertEquals ("stringRepo" , beanNames [0 ]);
707
828
829
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (RepositoryInterface .class , String .class ));
830
+ assertEquals (1 , beanNames .length );
831
+ assertEquals ("stringRepo" , beanNames [0 ]);
832
+
833
+ assertTrue (AopUtils .isJdkDynamicProxy (beanFactory .getBean ("stringRepo" )));
834
+ }
835
+
836
+ @ Test
837
+ public void genericsBasedInjectionWithLateGenericsMatchingOnJdkProxyAndRawInstance () {
838
+ beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawInstanceRepositoryConfiguration .class ));
839
+ new ConfigurationClassPostProcessor ().postProcessBeanFactory (beanFactory );
840
+ DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator ();
841
+ autoProxyCreator .setBeanFactory (beanFactory );
842
+ beanFactory .addBeanPostProcessor (autoProxyCreator );
843
+ beanFactory .registerSingleton ("traceInterceptor" , new DefaultPointcutAdvisor (new SimpleTraceInterceptor ()));
844
+ beanFactory .preInstantiateSingletons ();
845
+
846
+ String [] beanNames = beanFactory .getBeanNamesForType (RepositoryInterface .class );
847
+ assertTrue (ObjectUtils .containsElement (beanNames , "stringRepo" ));
848
+
849
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (RepositoryInterface .class , String .class ));
850
+ assertEquals (1 , beanNames .length );
851
+ assertEquals ("stringRepo" , beanNames [0 ]);
852
+
853
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (RepositoryInterface .class , String .class ));
854
+ assertEquals (1 , beanNames .length );
855
+ assertEquals ("stringRepo" , beanNames [0 ]);
856
+
708
857
assertTrue (AopUtils .isJdkDynamicProxy (beanFactory .getBean ("stringRepo" )));
709
858
}
710
859
@@ -1125,7 +1274,7 @@ public String toString() {
1125
1274
}
1126
1275
1127
1276
@ Configuration
1128
- public static class RawRepositoryConfiguration {
1277
+ public static class RawFactoryMethodRepositoryConfiguration {
1129
1278
1130
1279
@ Bean
1131
1280
public Repository stringRepo () {
@@ -1138,6 +1287,21 @@ public String toString() {
1138
1287
}
1139
1288
}
1140
1289
1290
+ @ Configuration
1291
+ public static class RawInstanceRepositoryConfiguration {
1292
+
1293
+ @ SuppressWarnings ({"rawtypes" , "unchecked" })
1294
+ @ Bean
1295
+ public Repository <String > stringRepo () {
1296
+ return new Repository () {
1297
+ @ Override
1298
+ public String toString () {
1299
+ return "Repository<String>" ;
1300
+ }
1301
+ };
1302
+ }
1303
+ }
1304
+
1141
1305
@ Configuration
1142
1306
public static class ScopedRepositoryConfiguration {
1143
1307
0 commit comments