Early resolution of unique factory methods in configuration classes
Includes consistent bean class resolution in the enhancement step as well as general reflection optimizations for user-declared methods.
Closes gh-22420
@ -153,7 +153,7 @@ public class ReflectiveAspectJAdvisorFactory extends AbstractAspectJAdvisorFacto
@@ -153,7 +153,7 @@ public class ReflectiveAspectJAdvisorFactory extends AbstractAspectJAdvisorFacto
@ -706,6 +706,10 @@ public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFac
@@ -706,6 +706,10 @@ public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFac
@ -731,12 +735,10 @@ public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFac
@@ -731,12 +735,10 @@ public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFac
// If all factory methods have the same return type, return that type.
// Can't clearly figure out exact method due to type converting / autowiring!
@ -796,6 +798,8 @@ public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFac
@@ -796,6 +798,8 @@ public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFac
if(commonType==null){
returnnull;
}
}
// Common return type found: all factory methods return same type. For a non-parameterized
// unique candidate, cache the full type declaration context of the target factory method.
cachedReturnType=(uniqueCandidate!=null?
@ -926,7 +930,7 @@ public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFac
@@ -926,7 +930,7 @@ public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFac
@ -237,6 +237,7 @@ public class RootBeanDefinition extends AbstractBeanDefinition {
@@ -237,6 +237,7 @@ public class RootBeanDefinition extends AbstractBeanDefinition {
@ -361,6 +362,16 @@ public class RootBeanDefinition extends AbstractBeanDefinition {
@@ -361,6 +362,16 @@ public class RootBeanDefinition extends AbstractBeanDefinition {
@ -368,6 +379,15 @@ public class RootBeanDefinition extends AbstractBeanDefinition {
@@ -368,6 +379,15 @@ public class RootBeanDefinition extends AbstractBeanDefinition {
@ -173,11 +173,10 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo
@@ -173,11 +173,10 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo
@ -264,8 +263,7 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo
@@ -264,8 +263,7 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo
logger.debug("Bean definition has already been processed as a configuration class: "+beanDef);
}
@ -292,7 +290,8 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo
@@ -292,7 +290,8 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo
@ -371,7 +370,26 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo
@@ -371,7 +370,26 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo
beanName+"' since it is not stored in an AbstractBeanDefinition subclass");
@ -395,10 +413,8 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo
@@ -395,10 +413,8 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo
AbstractBeanDefinitionbeanDef=entry.getValue();
// If a @Configuration class gets proxied, always proxy the target class
@ -409,11 +425,6 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo
@@ -409,11 +425,6 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo
@ -423,7 +423,7 @@ public class TransactionalTestExecutionListener extends AbstractTestExecutionLis
@@ -423,7 +423,7 @@ public class TransactionalTestExecutionListener extends AbstractTestExecutionLis