|
|
|
|
@ -571,6 +571,10 @@ public class ConfigurationClassPostProcessorTests {
@@ -571,6 +571,10 @@ public class ConfigurationClassPostProcessorTests {
|
|
|
|
|
beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); |
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
|
|
|
|
|
beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); |
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
@ -585,6 +589,78 @@ public class ConfigurationClassPostProcessorTests {
@@ -585,6 +589,78 @@ public class ConfigurationClassPostProcessorTests {
|
|
|
|
|
beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); |
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
|
|
|
|
|
beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); |
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void genericsBasedInjectionWithEarlyGenericsMatchingAndRawFactoryMethod() { |
|
|
|
|
beanFactory.registerBeanDefinition("configClass", new RootBeanDefinition(RawFactoryMethodRepositoryConfiguration.class)); |
|
|
|
|
new ConfigurationClassPostProcessor().postProcessBeanFactory(beanFactory); |
|
|
|
|
|
|
|
|
|
String[] beanNames = beanFactory.getBeanNamesForType(Repository.class); |
|
|
|
|
assertTrue(ObjectUtils.containsElement(beanNames, "stringRepo")); |
|
|
|
|
|
|
|
|
|
beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); |
|
|
|
|
assertEquals(0, beanNames.length); |
|
|
|
|
|
|
|
|
|
beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); |
|
|
|
|
assertEquals(0, beanNames.length); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void genericsBasedInjectionWithLateGenericsMatchingAndRawFactoryMethod() { |
|
|
|
|
beanFactory.registerBeanDefinition("configClass", new RootBeanDefinition(RawFactoryMethodRepositoryConfiguration.class)); |
|
|
|
|
new ConfigurationClassPostProcessor().postProcessBeanFactory(beanFactory); |
|
|
|
|
beanFactory.preInstantiateSingletons(); |
|
|
|
|
|
|
|
|
|
String[] beanNames = beanFactory.getBeanNamesForType(Repository.class); |
|
|
|
|
assertTrue(ObjectUtils.containsElement(beanNames, "stringRepo")); |
|
|
|
|
|
|
|
|
|
beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); |
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
|
|
|
|
|
beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); |
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void genericsBasedInjectionWithEarlyGenericsMatchingAndRawInstance() { |
|
|
|
|
beanFactory.registerBeanDefinition("configClass", new RootBeanDefinition(RawInstanceRepositoryConfiguration.class)); |
|
|
|
|
new ConfigurationClassPostProcessor().postProcessBeanFactory(beanFactory); |
|
|
|
|
|
|
|
|
|
String[] beanNames = beanFactory.getBeanNamesForType(Repository.class); |
|
|
|
|
assertTrue(ObjectUtils.containsElement(beanNames, "stringRepo")); |
|
|
|
|
|
|
|
|
|
beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); |
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
|
|
|
|
|
beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); |
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void genericsBasedInjectionWithLateGenericsMatchingAndRawInstance() { |
|
|
|
|
beanFactory.registerBeanDefinition("configClass", new RootBeanDefinition(RawInstanceRepositoryConfiguration.class)); |
|
|
|
|
new ConfigurationClassPostProcessor().postProcessBeanFactory(beanFactory); |
|
|
|
|
beanFactory.preInstantiateSingletons(); |
|
|
|
|
|
|
|
|
|
String[] beanNames = beanFactory.getBeanNamesForType(Repository.class); |
|
|
|
|
assertTrue(ObjectUtils.containsElement(beanNames, "stringRepo")); |
|
|
|
|
|
|
|
|
|
beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); |
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
|
|
|
|
|
beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); |
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
@ -604,6 +680,10 @@ public class ConfigurationClassPostProcessorTests {
@@ -604,6 +680,10 @@ public class ConfigurationClassPostProcessorTests {
|
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
|
|
|
|
|
beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); |
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
|
|
|
|
|
assertTrue(AopUtils.isCglibProxy(beanFactory.getBean("stringRepo"))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -625,12 +705,16 @@ public class ConfigurationClassPostProcessorTests {
@@ -625,12 +705,16 @@ public class ConfigurationClassPostProcessorTests {
|
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
|
|
|
|
|
beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); |
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
|
|
|
|
|
assertTrue(AopUtils.isCglibProxy(beanFactory.getBean("stringRepo"))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void genericsBasedInjectionWithLateGenericsMatchingOnCglibProxyAndRawFactoryMethod() { |
|
|
|
|
beanFactory.registerBeanDefinition("configClass", new RootBeanDefinition(RawRepositoryConfiguration.class)); |
|
|
|
|
beanFactory.registerBeanDefinition("configClass", new RootBeanDefinition(RawFactoryMethodRepositoryConfiguration.class)); |
|
|
|
|
new ConfigurationClassPostProcessor().postProcessBeanFactory(beanFactory); |
|
|
|
|
DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator(); |
|
|
|
|
autoProxyCreator.setProxyTargetClass(true); |
|
|
|
|
@ -646,6 +730,35 @@ public class ConfigurationClassPostProcessorTests {
@@ -646,6 +730,35 @@ public class ConfigurationClassPostProcessorTests {
|
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
|
|
|
|
|
beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); |
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
|
|
|
|
|
assertTrue(AopUtils.isCglibProxy(beanFactory.getBean("stringRepo"))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void genericsBasedInjectionWithLateGenericsMatchingOnCglibProxyAndRawInstance() { |
|
|
|
|
beanFactory.registerBeanDefinition("configClass", new RootBeanDefinition(RawInstanceRepositoryConfiguration.class)); |
|
|
|
|
new ConfigurationClassPostProcessor().postProcessBeanFactory(beanFactory); |
|
|
|
|
DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator(); |
|
|
|
|
autoProxyCreator.setProxyTargetClass(true); |
|
|
|
|
autoProxyCreator.setBeanFactory(beanFactory); |
|
|
|
|
beanFactory.addBeanPostProcessor(autoProxyCreator); |
|
|
|
|
beanFactory.registerSingleton("traceInterceptor", new DefaultPointcutAdvisor(new SimpleTraceInterceptor())); |
|
|
|
|
beanFactory.preInstantiateSingletons(); |
|
|
|
|
|
|
|
|
|
String[] beanNames = beanFactory.getBeanNamesForType(Repository.class); |
|
|
|
|
assertTrue(ObjectUtils.containsElement(beanNames, "stringRepo")); |
|
|
|
|
|
|
|
|
|
beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); |
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
|
|
|
|
|
beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Repository.class, String.class)); |
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
|
|
|
|
|
assertTrue(AopUtils.isCglibProxy(beanFactory.getBean("stringRepo"))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -665,6 +778,10 @@ public class ConfigurationClassPostProcessorTests {
@@ -665,6 +778,10 @@ public class ConfigurationClassPostProcessorTests {
|
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
|
|
|
|
|
beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(RepositoryInterface.class, String.class)); |
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
|
|
|
|
|
assertTrue(AopUtils.isJdkDynamicProxy(beanFactory.getBean("stringRepo"))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -685,12 +802,16 @@ public class ConfigurationClassPostProcessorTests {
@@ -685,12 +802,16 @@ public class ConfigurationClassPostProcessorTests {
|
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
|
|
|
|
|
beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(RepositoryInterface.class, String.class)); |
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
|
|
|
|
|
assertTrue(AopUtils.isJdkDynamicProxy(beanFactory.getBean("stringRepo"))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void genericsBasedInjectionWithLateGenericsMatchingOnJdkProxyAndRawFactoryMethod() { |
|
|
|
|
beanFactory.registerBeanDefinition("configClass", new RootBeanDefinition(RawRepositoryConfiguration.class)); |
|
|
|
|
beanFactory.registerBeanDefinition("configClass", new RootBeanDefinition(RawFactoryMethodRepositoryConfiguration.class)); |
|
|
|
|
new ConfigurationClassPostProcessor().postProcessBeanFactory(beanFactory); |
|
|
|
|
DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator(); |
|
|
|
|
autoProxyCreator.setBeanFactory(beanFactory); |
|
|
|
|
@ -705,6 +826,34 @@ public class ConfigurationClassPostProcessorTests {
@@ -705,6 +826,34 @@ public class ConfigurationClassPostProcessorTests {
|
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
|
|
|
|
|
beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(RepositoryInterface.class, String.class)); |
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
|
|
|
|
|
assertTrue(AopUtils.isJdkDynamicProxy(beanFactory.getBean("stringRepo"))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void genericsBasedInjectionWithLateGenericsMatchingOnJdkProxyAndRawInstance() { |
|
|
|
|
beanFactory.registerBeanDefinition("configClass", new RootBeanDefinition(RawInstanceRepositoryConfiguration.class)); |
|
|
|
|
new ConfigurationClassPostProcessor().postProcessBeanFactory(beanFactory); |
|
|
|
|
DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator(); |
|
|
|
|
autoProxyCreator.setBeanFactory(beanFactory); |
|
|
|
|
beanFactory.addBeanPostProcessor(autoProxyCreator); |
|
|
|
|
beanFactory.registerSingleton("traceInterceptor", new DefaultPointcutAdvisor(new SimpleTraceInterceptor())); |
|
|
|
|
beanFactory.preInstantiateSingletons(); |
|
|
|
|
|
|
|
|
|
String[] beanNames = beanFactory.getBeanNamesForType(RepositoryInterface.class); |
|
|
|
|
assertTrue(ObjectUtils.containsElement(beanNames, "stringRepo")); |
|
|
|
|
|
|
|
|
|
beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(RepositoryInterface.class, String.class)); |
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
|
|
|
|
|
beanNames = beanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(RepositoryInterface.class, String.class)); |
|
|
|
|
assertEquals(1, beanNames.length); |
|
|
|
|
assertEquals("stringRepo", beanNames[0]); |
|
|
|
|
|
|
|
|
|
assertTrue(AopUtils.isJdkDynamicProxy(beanFactory.getBean("stringRepo"))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -1125,7 +1274,7 @@ public class ConfigurationClassPostProcessorTests {
@@ -1125,7 +1274,7 @@ public class ConfigurationClassPostProcessorTests {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Configuration |
|
|
|
|
public static class RawRepositoryConfiguration { |
|
|
|
|
public static class RawFactoryMethodRepositoryConfiguration { |
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
|
public Repository stringRepo() { |
|
|
|
|
@ -1138,6 +1287,21 @@ public class ConfigurationClassPostProcessorTests {
@@ -1138,6 +1287,21 @@ public class ConfigurationClassPostProcessorTests {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Configuration |
|
|
|
|
public static class RawInstanceRepositoryConfiguration { |
|
|
|
|
|
|
|
|
|
@SuppressWarnings({"rawtypes", "unchecked"}) |
|
|
|
|
@Bean |
|
|
|
|
public Repository<String> stringRepo() { |
|
|
|
|
return new Repository() { |
|
|
|
|
@Override |
|
|
|
|
public String toString() { |
|
|
|
|
return "Repository<String>"; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Configuration |
|
|
|
|
public static class ScopedRepositoryConfiguration { |
|
|
|
|
|
|
|
|
|
|