@@ -570,6 +570,10 @@ public void genericsBasedInjectionWithEarlyGenericsMatching() {
570
570
beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
571
571
assertEquals (1 , beanNames .length );
572
572
assertEquals ("stringRepo" , beanNames [0 ]);
573
+
574
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
575
+ assertEquals (1 , beanNames .length );
576
+ assertEquals ("stringRepo" , beanNames [0 ]);
573
577
}
574
578
575
579
@ Test
@@ -584,6 +588,78 @@ public void genericsBasedInjectionWithLateGenericsMatching() {
584
588
beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
585
589
assertEquals (1 , beanNames .length );
586
590
assertEquals ("stringRepo" , beanNames [0 ]);
591
+
592
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
593
+ assertEquals (1 , beanNames .length );
594
+ assertEquals ("stringRepo" , beanNames [0 ]);
595
+ }
596
+
597
+ @ Test
598
+ public void genericsBasedInjectionWithEarlyGenericsMatchingAndRawFactoryMethod () {
599
+ beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawFactoryMethodRepositoryConfiguration .class ));
600
+ new ConfigurationClassPostProcessor ().postProcessBeanFactory (beanFactory );
601
+
602
+ String [] beanNames = beanFactory .getBeanNamesForType (Repository .class );
603
+ assertTrue (ObjectUtils .containsElement (beanNames , "stringRepo" ));
604
+
605
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
606
+ assertEquals (0 , beanNames .length );
607
+
608
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
609
+ assertEquals (0 , beanNames .length );
610
+ }
611
+
612
+ @ Test
613
+ public void genericsBasedInjectionWithLateGenericsMatchingAndRawFactoryMethod () {
614
+ beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawFactoryMethodRepositoryConfiguration .class ));
615
+ new ConfigurationClassPostProcessor ().postProcessBeanFactory (beanFactory );
616
+ beanFactory .preInstantiateSingletons ();
617
+
618
+ String [] beanNames = beanFactory .getBeanNamesForType (Repository .class );
619
+ assertTrue (ObjectUtils .containsElement (beanNames , "stringRepo" ));
620
+
621
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
622
+ assertEquals (1 , beanNames .length );
623
+ assertEquals ("stringRepo" , beanNames [0 ]);
624
+
625
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
626
+ assertEquals (1 , beanNames .length );
627
+ assertEquals ("stringRepo" , beanNames [0 ]);
628
+ }
629
+
630
+ @ Test
631
+ public void genericsBasedInjectionWithEarlyGenericsMatchingAndRawInstance () {
632
+ beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawInstanceRepositoryConfiguration .class ));
633
+ new ConfigurationClassPostProcessor ().postProcessBeanFactory (beanFactory );
634
+
635
+ String [] beanNames = beanFactory .getBeanNamesForType (Repository .class );
636
+ assertTrue (ObjectUtils .containsElement (beanNames , "stringRepo" ));
637
+
638
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
639
+ assertEquals (1 , beanNames .length );
640
+ assertEquals ("stringRepo" , beanNames [0 ]);
641
+
642
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
643
+ assertEquals (1 , beanNames .length );
644
+ assertEquals ("stringRepo" , beanNames [0 ]);
645
+ }
646
+
647
+ @ Test
648
+ public void genericsBasedInjectionWithLateGenericsMatchingAndRawInstance () {
649
+ beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawInstanceRepositoryConfiguration .class ));
650
+ new ConfigurationClassPostProcessor ().postProcessBeanFactory (beanFactory );
651
+ beanFactory .preInstantiateSingletons ();
652
+
653
+ String [] beanNames = beanFactory .getBeanNamesForType (Repository .class );
654
+ assertTrue (ObjectUtils .containsElement (beanNames , "stringRepo" ));
655
+
656
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
657
+ assertEquals (1 , beanNames .length );
658
+ assertEquals ("stringRepo" , beanNames [0 ]);
659
+
660
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
661
+ assertEquals (1 , beanNames .length );
662
+ assertEquals ("stringRepo" , beanNames [0 ]);
587
663
}
588
664
589
665
@ Test
@@ -603,6 +679,10 @@ public void genericsBasedInjectionWithEarlyGenericsMatchingOnCglibProxy() {
603
679
assertEquals (1 , beanNames .length );
604
680
assertEquals ("stringRepo" , beanNames [0 ]);
605
681
682
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
683
+ assertEquals (1 , beanNames .length );
684
+ assertEquals ("stringRepo" , beanNames [0 ]);
685
+
606
686
assertTrue (AopUtils .isCglibProxy (beanFactory .getBean ("stringRepo" )));
607
687
}
608
688
@@ -624,12 +704,16 @@ public void genericsBasedInjectionWithLateGenericsMatchingOnCglibProxy() {
624
704
assertEquals (1 , beanNames .length );
625
705
assertEquals ("stringRepo" , beanNames [0 ]);
626
706
707
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
708
+ assertEquals (1 , beanNames .length );
709
+ assertEquals ("stringRepo" , beanNames [0 ]);
710
+
627
711
assertTrue (AopUtils .isCglibProxy (beanFactory .getBean ("stringRepo" )));
628
712
}
629
713
630
714
@ Test
631
715
public void genericsBasedInjectionWithLateGenericsMatchingOnCglibProxyAndRawFactoryMethod () {
632
- beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawRepositoryConfiguration .class ));
716
+ beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawFactoryMethodRepositoryConfiguration .class ));
633
717
new ConfigurationClassPostProcessor ().postProcessBeanFactory (beanFactory );
634
718
DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator ();
635
719
autoProxyCreator .setProxyTargetClass (true );
@@ -645,6 +729,35 @@ public void genericsBasedInjectionWithLateGenericsMatchingOnCglibProxyAndRawFact
645
729
assertEquals (1 , beanNames .length );
646
730
assertEquals ("stringRepo" , beanNames [0 ]);
647
731
732
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
733
+ assertEquals (1 , beanNames .length );
734
+ assertEquals ("stringRepo" , beanNames [0 ]);
735
+
736
+ assertTrue (AopUtils .isCglibProxy (beanFactory .getBean ("stringRepo" )));
737
+ }
738
+
739
+ @ Test
740
+ public void genericsBasedInjectionWithLateGenericsMatchingOnCglibProxyAndRawInstance () {
741
+ beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawInstanceRepositoryConfiguration .class ));
742
+ new ConfigurationClassPostProcessor ().postProcessBeanFactory (beanFactory );
743
+ DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator ();
744
+ autoProxyCreator .setProxyTargetClass (true );
745
+ autoProxyCreator .setBeanFactory (beanFactory );
746
+ beanFactory .addBeanPostProcessor (autoProxyCreator );
747
+ beanFactory .registerSingleton ("traceInterceptor" , new DefaultPointcutAdvisor (new SimpleTraceInterceptor ()));
748
+ beanFactory .preInstantiateSingletons ();
749
+
750
+ String [] beanNames = beanFactory .getBeanNamesForType (Repository .class );
751
+ assertTrue (ObjectUtils .containsElement (beanNames , "stringRepo" ));
752
+
753
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
754
+ assertEquals (1 , beanNames .length );
755
+ assertEquals ("stringRepo" , beanNames [0 ]);
756
+
757
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
758
+ assertEquals (1 , beanNames .length );
759
+ assertEquals ("stringRepo" , beanNames [0 ]);
760
+
648
761
assertTrue (AopUtils .isCglibProxy (beanFactory .getBean ("stringRepo" )));
649
762
}
650
763
@@ -664,6 +777,10 @@ public void genericsBasedInjectionWithEarlyGenericsMatchingOnJdkProxy() {
664
777
assertEquals (1 , beanNames .length );
665
778
assertEquals ("stringRepo" , beanNames [0 ]);
666
779
780
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (RepositoryInterface .class , String .class ));
781
+ assertEquals (1 , beanNames .length );
782
+ assertEquals ("stringRepo" , beanNames [0 ]);
783
+
667
784
assertTrue (AopUtils .isJdkDynamicProxy (beanFactory .getBean ("stringRepo" )));
668
785
}
669
786
@@ -684,12 +801,16 @@ public void genericsBasedInjectionWithLateGenericsMatchingOnJdkProxy() {
684
801
assertEquals (1 , beanNames .length );
685
802
assertEquals ("stringRepo" , beanNames [0 ]);
686
803
804
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (RepositoryInterface .class , String .class ));
805
+ assertEquals (1 , beanNames .length );
806
+ assertEquals ("stringRepo" , beanNames [0 ]);
807
+
687
808
assertTrue (AopUtils .isJdkDynamicProxy (beanFactory .getBean ("stringRepo" )));
688
809
}
689
810
690
811
@ Test
691
812
public void genericsBasedInjectionWithLateGenericsMatchingOnJdkProxyAndRawFactoryMethod () {
692
- beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawRepositoryConfiguration .class ));
813
+ beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawFactoryMethodRepositoryConfiguration .class ));
693
814
new ConfigurationClassPostProcessor ().postProcessBeanFactory (beanFactory );
694
815
DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator ();
695
816
autoProxyCreator .setBeanFactory (beanFactory );
@@ -704,6 +825,34 @@ public void genericsBasedInjectionWithLateGenericsMatchingOnJdkProxyAndRawFactor
704
825
assertEquals (1 , beanNames .length );
705
826
assertEquals ("stringRepo" , beanNames [0 ]);
706
827
828
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (RepositoryInterface .class , String .class ));
829
+ assertEquals (1 , beanNames .length );
830
+ assertEquals ("stringRepo" , beanNames [0 ]);
831
+
832
+ assertTrue (AopUtils .isJdkDynamicProxy (beanFactory .getBean ("stringRepo" )));
833
+ }
834
+
835
+ @ Test
836
+ public void genericsBasedInjectionWithLateGenericsMatchingOnJdkProxyAndRawInstance () {
837
+ beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawInstanceRepositoryConfiguration .class ));
838
+ new ConfigurationClassPostProcessor ().postProcessBeanFactory (beanFactory );
839
+ DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator ();
840
+ autoProxyCreator .setBeanFactory (beanFactory );
841
+ beanFactory .addBeanPostProcessor (autoProxyCreator );
842
+ beanFactory .registerSingleton ("traceInterceptor" , new DefaultPointcutAdvisor (new SimpleTraceInterceptor ()));
843
+ beanFactory .preInstantiateSingletons ();
844
+
845
+ String [] beanNames = beanFactory .getBeanNamesForType (RepositoryInterface .class );
846
+ assertTrue (ObjectUtils .containsElement (beanNames , "stringRepo" ));
847
+
848
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (RepositoryInterface .class , String .class ));
849
+ assertEquals (1 , beanNames .length );
850
+ assertEquals ("stringRepo" , beanNames [0 ]);
851
+
852
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (RepositoryInterface .class , String .class ));
853
+ assertEquals (1 , beanNames .length );
854
+ assertEquals ("stringRepo" , beanNames [0 ]);
855
+
707
856
assertTrue (AopUtils .isJdkDynamicProxy (beanFactory .getBean ("stringRepo" )));
708
857
}
709
858
@@ -1073,7 +1222,7 @@ public String toString() {
1073
1222
}
1074
1223
1075
1224
@ Configuration
1076
- public static class RawRepositoryConfiguration {
1225
+ public static class RawFactoryMethodRepositoryConfiguration {
1077
1226
1078
1227
@ Bean
1079
1228
public Repository stringRepo () {
@@ -1086,6 +1235,21 @@ public String toString() {
1086
1235
}
1087
1236
}
1088
1237
1238
+ @ Configuration
1239
+ public static class RawInstanceRepositoryConfiguration {
1240
+
1241
+ @ SuppressWarnings ({"rawtypes" , "unchecked" })
1242
+ @ Bean
1243
+ public Repository <String > stringRepo () {
1244
+ return new Repository () {
1245
+ @ Override
1246
+ public String toString () {
1247
+ return "Repository<String>" ;
1248
+ }
1249
+ };
1250
+ }
1251
+ }
1252
+
1089
1253
@ Configuration
1090
1254
public static class ScopedRepositoryConfiguration {
1091
1255
0 commit comments