|
|
|
|
@ -570,6 +570,10 @@ public class ConfigurationClassPostProcessorTests {
@@ -570,6 +570,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 |
|
|
|
|
@ -584,6 +588,78 @@ public class ConfigurationClassPostProcessorTests {
@@ -584,6 +588,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 |
|
|
|
|
@ -603,6 +679,10 @@ public class ConfigurationClassPostProcessorTests {
@@ -603,6 +679,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"))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -624,12 +704,16 @@ public class ConfigurationClassPostProcessorTests {
@@ -624,12 +704,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); |
|
|
|
|
@ -645,6 +729,35 @@ public class ConfigurationClassPostProcessorTests {
@@ -645,6 +729,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"))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -664,6 +777,10 @@ public class ConfigurationClassPostProcessorTests {
@@ -664,6 +777,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"))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -684,12 +801,16 @@ public class ConfigurationClassPostProcessorTests {
@@ -684,12 +801,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); |
|
|
|
|
@ -704,6 +825,34 @@ public class ConfigurationClassPostProcessorTests {
@@ -704,6 +825,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"))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -1073,7 +1222,7 @@ public class ConfigurationClassPostProcessorTests {
@@ -1073,7 +1222,7 @@ public class ConfigurationClassPostProcessorTests {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Configuration |
|
|
|
|
public static class RawRepositoryConfiguration { |
|
|
|
|
public static class RawFactoryMethodRepositoryConfiguration { |
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
|
public Repository stringRepo() { |
|
|
|
|
@ -1086,6 +1235,21 @@ public class ConfigurationClassPostProcessorTests {
@@ -1086,6 +1235,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 { |
|
|
|
|
|
|
|
|
|
|