|
|
|
|
@ -544,6 +544,10 @@ public class ConfigurationClassPostProcessorTests {
@@ -544,6 +544,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 |
|
|
|
|
@ -558,6 +562,78 @@ public class ConfigurationClassPostProcessorTests {
@@ -558,6 +562,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 |
|
|
|
|
@ -577,6 +653,10 @@ public class ConfigurationClassPostProcessorTests {
@@ -577,6 +653,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"))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -598,12 +678,16 @@ public class ConfigurationClassPostProcessorTests {
@@ -598,12 +678,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); |
|
|
|
|
@ -619,6 +703,35 @@ public class ConfigurationClassPostProcessorTests {
@@ -619,6 +703,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"))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -638,6 +751,10 @@ public class ConfigurationClassPostProcessorTests {
@@ -638,6 +751,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"))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -658,12 +775,16 @@ public class ConfigurationClassPostProcessorTests {
@@ -658,12 +775,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); |
|
|
|
|
@ -678,6 +799,34 @@ public class ConfigurationClassPostProcessorTests {
@@ -678,6 +799,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"))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -980,7 +1129,7 @@ public class ConfigurationClassPostProcessorTests {
@@ -980,7 +1129,7 @@ public class ConfigurationClassPostProcessorTests {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Configuration |
|
|
|
|
public static class RawRepositoryConfiguration { |
|
|
|
|
public static class RawFactoryMethodRepositoryConfiguration { |
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
|
public Repository stringRepo() { |
|
|
|
|
@ -993,6 +1142,21 @@ public class ConfigurationClassPostProcessorTests {
@@ -993,6 +1142,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 { |
|
|
|
|
|
|
|
|
|
|