@@ -544,6 +544,10 @@ public void genericsBasedInjectionWithEarlyGenericsMatching() {
544
544
beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
545
545
assertEquals (1 , beanNames .length );
546
546
assertEquals ("stringRepo" , beanNames [0 ]);
547
+
548
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
549
+ assertEquals (1 , beanNames .length );
550
+ assertEquals ("stringRepo" , beanNames [0 ]);
547
551
}
548
552
549
553
@ Test
@@ -558,6 +562,78 @@ public void genericsBasedInjectionWithLateGenericsMatching() {
558
562
beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
559
563
assertEquals (1 , beanNames .length );
560
564
assertEquals ("stringRepo" , beanNames [0 ]);
565
+
566
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
567
+ assertEquals (1 , beanNames .length );
568
+ assertEquals ("stringRepo" , beanNames [0 ]);
569
+ }
570
+
571
+ @ Test
572
+ public void genericsBasedInjectionWithEarlyGenericsMatchingAndRawFactoryMethod () {
573
+ beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawFactoryMethodRepositoryConfiguration .class ));
574
+ new ConfigurationClassPostProcessor ().postProcessBeanFactory (beanFactory );
575
+
576
+ String [] beanNames = beanFactory .getBeanNamesForType (Repository .class );
577
+ assertTrue (ObjectUtils .containsElement (beanNames , "stringRepo" ));
578
+
579
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
580
+ assertEquals (0 , beanNames .length );
581
+
582
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
583
+ assertEquals (0 , beanNames .length );
584
+ }
585
+
586
+ @ Test
587
+ public void genericsBasedInjectionWithLateGenericsMatchingAndRawFactoryMethod () {
588
+ beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawFactoryMethodRepositoryConfiguration .class ));
589
+ new ConfigurationClassPostProcessor ().postProcessBeanFactory (beanFactory );
590
+ beanFactory .preInstantiateSingletons ();
591
+
592
+ String [] beanNames = beanFactory .getBeanNamesForType (Repository .class );
593
+ assertTrue (ObjectUtils .containsElement (beanNames , "stringRepo" ));
594
+
595
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
596
+ assertEquals (1 , beanNames .length );
597
+ assertEquals ("stringRepo" , beanNames [0 ]);
598
+
599
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
600
+ assertEquals (1 , beanNames .length );
601
+ assertEquals ("stringRepo" , beanNames [0 ]);
602
+ }
603
+
604
+ @ Test
605
+ public void genericsBasedInjectionWithEarlyGenericsMatchingAndRawInstance () {
606
+ beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawInstanceRepositoryConfiguration .class ));
607
+ new ConfigurationClassPostProcessor ().postProcessBeanFactory (beanFactory );
608
+
609
+ String [] beanNames = beanFactory .getBeanNamesForType (Repository .class );
610
+ assertTrue (ObjectUtils .containsElement (beanNames , "stringRepo" ));
611
+
612
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
613
+ assertEquals (1 , beanNames .length );
614
+ assertEquals ("stringRepo" , beanNames [0 ]);
615
+
616
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
617
+ assertEquals (1 , beanNames .length );
618
+ assertEquals ("stringRepo" , beanNames [0 ]);
619
+ }
620
+
621
+ @ Test
622
+ public void genericsBasedInjectionWithLateGenericsMatchingAndRawInstance () {
623
+ beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawInstanceRepositoryConfiguration .class ));
624
+ new ConfigurationClassPostProcessor ().postProcessBeanFactory (beanFactory );
625
+ beanFactory .preInstantiateSingletons ();
626
+
627
+ String [] beanNames = beanFactory .getBeanNamesForType (Repository .class );
628
+ assertTrue (ObjectUtils .containsElement (beanNames , "stringRepo" ));
629
+
630
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
631
+ assertEquals (1 , beanNames .length );
632
+ assertEquals ("stringRepo" , beanNames [0 ]);
633
+
634
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
635
+ assertEquals (1 , beanNames .length );
636
+ assertEquals ("stringRepo" , beanNames [0 ]);
561
637
}
562
638
563
639
@ Test
@@ -577,6 +653,10 @@ public void genericsBasedInjectionWithEarlyGenericsMatchingOnCglibProxy() {
577
653
assertEquals (1 , beanNames .length );
578
654
assertEquals ("stringRepo" , beanNames [0 ]);
579
655
656
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
657
+ assertEquals (1 , beanNames .length );
658
+ assertEquals ("stringRepo" , beanNames [0 ]);
659
+
580
660
assertTrue (AopUtils .isCglibProxy (beanFactory .getBean ("stringRepo" )));
581
661
}
582
662
@@ -598,12 +678,16 @@ public void genericsBasedInjectionWithLateGenericsMatchingOnCglibProxy() {
598
678
assertEquals (1 , beanNames .length );
599
679
assertEquals ("stringRepo" , beanNames [0 ]);
600
680
681
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
682
+ assertEquals (1 , beanNames .length );
683
+ assertEquals ("stringRepo" , beanNames [0 ]);
684
+
601
685
assertTrue (AopUtils .isCglibProxy (beanFactory .getBean ("stringRepo" )));
602
686
}
603
687
604
688
@ Test
605
689
public void genericsBasedInjectionWithLateGenericsMatchingOnCglibProxyAndRawFactoryMethod () {
606
- beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawRepositoryConfiguration .class ));
690
+ beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawFactoryMethodRepositoryConfiguration .class ));
607
691
new ConfigurationClassPostProcessor ().postProcessBeanFactory (beanFactory );
608
692
DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator ();
609
693
autoProxyCreator .setProxyTargetClass (true );
@@ -619,6 +703,35 @@ public void genericsBasedInjectionWithLateGenericsMatchingOnCglibProxyAndRawFact
619
703
assertEquals (1 , beanNames .length );
620
704
assertEquals ("stringRepo" , beanNames [0 ]);
621
705
706
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
707
+ assertEquals (1 , beanNames .length );
708
+ assertEquals ("stringRepo" , beanNames [0 ]);
709
+
710
+ assertTrue (AopUtils .isCglibProxy (beanFactory .getBean ("stringRepo" )));
711
+ }
712
+
713
+ @ Test
714
+ public void genericsBasedInjectionWithLateGenericsMatchingOnCglibProxyAndRawInstance () {
715
+ beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawInstanceRepositoryConfiguration .class ));
716
+ new ConfigurationClassPostProcessor ().postProcessBeanFactory (beanFactory );
717
+ DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator ();
718
+ autoProxyCreator .setProxyTargetClass (true );
719
+ autoProxyCreator .setBeanFactory (beanFactory );
720
+ beanFactory .addBeanPostProcessor (autoProxyCreator );
721
+ beanFactory .registerSingleton ("traceInterceptor" , new DefaultPointcutAdvisor (new SimpleTraceInterceptor ()));
722
+ beanFactory .preInstantiateSingletons ();
723
+
724
+ String [] beanNames = beanFactory .getBeanNamesForType (Repository .class );
725
+ assertTrue (ObjectUtils .containsElement (beanNames , "stringRepo" ));
726
+
727
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
728
+ assertEquals (1 , beanNames .length );
729
+ assertEquals ("stringRepo" , beanNames [0 ]);
730
+
731
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (Repository .class , String .class ));
732
+ assertEquals (1 , beanNames .length );
733
+ assertEquals ("stringRepo" , beanNames [0 ]);
734
+
622
735
assertTrue (AopUtils .isCglibProxy (beanFactory .getBean ("stringRepo" )));
623
736
}
624
737
@@ -638,6 +751,10 @@ public void genericsBasedInjectionWithEarlyGenericsMatchingOnJdkProxy() {
638
751
assertEquals (1 , beanNames .length );
639
752
assertEquals ("stringRepo" , beanNames [0 ]);
640
753
754
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (RepositoryInterface .class , String .class ));
755
+ assertEquals (1 , beanNames .length );
756
+ assertEquals ("stringRepo" , beanNames [0 ]);
757
+
641
758
assertTrue (AopUtils .isJdkDynamicProxy (beanFactory .getBean ("stringRepo" )));
642
759
}
643
760
@@ -658,12 +775,16 @@ public void genericsBasedInjectionWithLateGenericsMatchingOnJdkProxy() {
658
775
assertEquals (1 , beanNames .length );
659
776
assertEquals ("stringRepo" , beanNames [0 ]);
660
777
778
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (RepositoryInterface .class , String .class ));
779
+ assertEquals (1 , beanNames .length );
780
+ assertEquals ("stringRepo" , beanNames [0 ]);
781
+
661
782
assertTrue (AopUtils .isJdkDynamicProxy (beanFactory .getBean ("stringRepo" )));
662
783
}
663
784
664
785
@ Test
665
786
public void genericsBasedInjectionWithLateGenericsMatchingOnJdkProxyAndRawFactoryMethod () {
666
- beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawRepositoryConfiguration .class ));
787
+ beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawFactoryMethodRepositoryConfiguration .class ));
667
788
new ConfigurationClassPostProcessor ().postProcessBeanFactory (beanFactory );
668
789
DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator ();
669
790
autoProxyCreator .setBeanFactory (beanFactory );
@@ -678,6 +799,34 @@ public void genericsBasedInjectionWithLateGenericsMatchingOnJdkProxyAndRawFactor
678
799
assertEquals (1 , beanNames .length );
679
800
assertEquals ("stringRepo" , beanNames [0 ]);
680
801
802
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (RepositoryInterface .class , String .class ));
803
+ assertEquals (1 , beanNames .length );
804
+ assertEquals ("stringRepo" , beanNames [0 ]);
805
+
806
+ assertTrue (AopUtils .isJdkDynamicProxy (beanFactory .getBean ("stringRepo" )));
807
+ }
808
+
809
+ @ Test
810
+ public void genericsBasedInjectionWithLateGenericsMatchingOnJdkProxyAndRawInstance () {
811
+ beanFactory .registerBeanDefinition ("configClass" , new RootBeanDefinition (RawInstanceRepositoryConfiguration .class ));
812
+ new ConfigurationClassPostProcessor ().postProcessBeanFactory (beanFactory );
813
+ DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator ();
814
+ autoProxyCreator .setBeanFactory (beanFactory );
815
+ beanFactory .addBeanPostProcessor (autoProxyCreator );
816
+ beanFactory .registerSingleton ("traceInterceptor" , new DefaultPointcutAdvisor (new SimpleTraceInterceptor ()));
817
+ beanFactory .preInstantiateSingletons ();
818
+
819
+ String [] beanNames = beanFactory .getBeanNamesForType (RepositoryInterface .class );
820
+ assertTrue (ObjectUtils .containsElement (beanNames , "stringRepo" ));
821
+
822
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (RepositoryInterface .class , String .class ));
823
+ assertEquals (1 , beanNames .length );
824
+ assertEquals ("stringRepo" , beanNames [0 ]);
825
+
826
+ beanNames = beanFactory .getBeanNamesForType (ResolvableType .forClassWithGenerics (RepositoryInterface .class , String .class ));
827
+ assertEquals (1 , beanNames .length );
828
+ assertEquals ("stringRepo" , beanNames [0 ]);
829
+
681
830
assertTrue (AopUtils .isJdkDynamicProxy (beanFactory .getBean ("stringRepo" )));
682
831
}
683
832
@@ -980,7 +1129,7 @@ public String toString() {
980
1129
}
981
1130
982
1131
@ Configuration
983
- public static class RawRepositoryConfiguration {
1132
+ public static class RawFactoryMethodRepositoryConfiguration {
984
1133
985
1134
@ Bean
986
1135
public Repository stringRepo () {
@@ -993,6 +1142,21 @@ public String toString() {
993
1142
}
994
1143
}
995
1144
1145
+ @ Configuration
1146
+ public static class RawInstanceRepositoryConfiguration {
1147
+
1148
+ @ SuppressWarnings ({"rawtypes" , "unchecked" })
1149
+ @ Bean
1150
+ public Repository <String > stringRepo () {
1151
+ return new Repository () {
1152
+ @ Override
1153
+ public String toString () {
1154
+ return "Repository<String>" ;
1155
+ }
1156
+ };
1157
+ }
1158
+ }
1159
+
996
1160
@ Configuration
997
1161
public static class ScopedRepositoryConfiguration {
998
1162
0 commit comments