|
|
|
@ -46,24 +46,21 @@ import org.springframework.lang.Nullable; |
|
|
|
* @author Phillip Webb |
|
|
|
* @author Phillip Webb |
|
|
|
* @since 6.0 |
|
|
|
* @since 6.0 |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
class ScopedProxyBeanRegistrationAotProcessor |
|
|
|
class ScopedProxyBeanRegistrationAotProcessor implements BeanRegistrationAotProcessor { |
|
|
|
implements BeanRegistrationAotProcessor { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static final Log logger = LogFactory |
|
|
|
private static final Log logger = LogFactory.getLog(ScopedProxyBeanRegistrationAotProcessor.class); |
|
|
|
.getLog(ScopedProxyBeanRegistrationAotProcessor.class); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public BeanRegistrationAotContribution processAheadOfTime(RegisteredBean registeredBean) { |
|
|
|
public BeanRegistrationAotContribution processAheadOfTime(RegisteredBean registeredBean) { |
|
|
|
Class<?> beanType = registeredBean.getBeanType().toClass(); |
|
|
|
Class<?> beanType = registeredBean.getBeanType().toClass(); |
|
|
|
if (beanType.equals(ScopedProxyFactoryBean.class)) { |
|
|
|
if (beanType.equals(ScopedProxyFactoryBean.class)) { |
|
|
|
String targetBeanName = getTargetBeanName( |
|
|
|
String targetBeanName = getTargetBeanName(registeredBean.getMergedBeanDefinition()); |
|
|
|
registeredBean.getMergedBeanDefinition()); |
|
|
|
BeanDefinition targetBeanDefinition = |
|
|
|
BeanDefinition targetBeanDefinition = getTargetBeanDefinition( |
|
|
|
getTargetBeanDefinition(registeredBean.getBeanFactory(), targetBeanName); |
|
|
|
registeredBean.getBeanFactory(), targetBeanName); |
|
|
|
|
|
|
|
if (targetBeanDefinition == null) { |
|
|
|
if (targetBeanDefinition == null) { |
|
|
|
logger.warn("Could not handle " + ScopedProxyFactoryBean.class.getSimpleName() |
|
|
|
logger.warn("Could not handle " + ScopedProxyFactoryBean.class.getSimpleName() + |
|
|
|
+ ": no target bean definition found with name " + targetBeanName); |
|
|
|
": no target bean definition found with name " + targetBeanName); |
|
|
|
return null; |
|
|
|
return null; |
|
|
|
} |
|
|
|
} |
|
|
|
return BeanRegistrationAotContribution.ofBeanRegistrationCodeFragmentsCustomizer(codeFragments -> |
|
|
|
return BeanRegistrationAotContribution.ofBeanRegistrationCodeFragmentsCustomizer(codeFragments -> |
|
|
|
@ -76,7 +73,7 @@ class ScopedProxyBeanRegistrationAotProcessor |
|
|
|
@Nullable |
|
|
|
@Nullable |
|
|
|
private String getTargetBeanName(BeanDefinition beanDefinition) { |
|
|
|
private String getTargetBeanName(BeanDefinition beanDefinition) { |
|
|
|
Object value = beanDefinition.getPropertyValues().get("targetBeanName"); |
|
|
|
Object value = beanDefinition.getPropertyValues().get("targetBeanName"); |
|
|
|
return (value instanceof String) ? (String) value : null; |
|
|
|
return (value instanceof String ? (String) value : null); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Nullable |
|
|
|
@Nullable |
|
|
|
@ -90,23 +87,18 @@ class ScopedProxyBeanRegistrationAotProcessor |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static class ScopedProxyBeanRegistrationCodeFragments |
|
|
|
private static class ScopedProxyBeanRegistrationCodeFragments extends BeanRegistrationCodeFragments { |
|
|
|
extends BeanRegistrationCodeFragments { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static final String REGISTERED_BEAN_PARAMETER_NAME = "registeredBean"; |
|
|
|
private static final String REGISTERED_BEAN_PARAMETER_NAME = "registeredBean"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private final RegisteredBean registeredBean; |
|
|
|
private final RegisteredBean registeredBean; |
|
|
|
|
|
|
|
|
|
|
|
private final String targetBeanName; |
|
|
|
private final String targetBeanName; |
|
|
|
|
|
|
|
|
|
|
|
private final BeanDefinition targetBeanDefinition; |
|
|
|
private final BeanDefinition targetBeanDefinition; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ScopedProxyBeanRegistrationCodeFragments(BeanRegistrationCodeFragments codeGenerator, |
|
|
|
ScopedProxyBeanRegistrationCodeFragments( |
|
|
|
RegisteredBean registeredBean, String targetBeanName, BeanDefinition targetBeanDefinition) { |
|
|
|
BeanRegistrationCodeFragments codeGenerator, |
|
|
|
|
|
|
|
RegisteredBean registeredBean, String targetBeanName, |
|
|
|
|
|
|
|
BeanDefinition targetBeanDefinition) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
super(codeGenerator); |
|
|
|
super(codeGenerator); |
|
|
|
this.registeredBean = registeredBean; |
|
|
|
this.registeredBean = registeredBean; |
|
|
|
@ -114,17 +106,14 @@ class ScopedProxyBeanRegistrationAotProcessor |
|
|
|
this.targetBeanDefinition = targetBeanDefinition; |
|
|
|
this.targetBeanDefinition = targetBeanDefinition; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public Class<?> getTarget(RegisteredBean registeredBean, |
|
|
|
public Class<?> getTarget(RegisteredBean registeredBean, Executable constructorOrFactoryMethod) { |
|
|
|
Executable constructorOrFactoryMethod) { |
|
|
|
|
|
|
|
return this.targetBeanDefinition.getResolvableType().toClass(); |
|
|
|
return this.targetBeanDefinition.getResolvableType().toClass(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public CodeBlock generateNewBeanDefinitionCode( |
|
|
|
public CodeBlock generateNewBeanDefinitionCode(GenerationContext generationContext, |
|
|
|
GenerationContext generationContext, ResolvableType beanType, |
|
|
|
ResolvableType beanType, BeanRegistrationCode beanRegistrationCode) { |
|
|
|
BeanRegistrationCode beanRegistrationCode) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return super.generateNewBeanDefinitionCode(generationContext, |
|
|
|
return super.generateNewBeanDefinitionCode(generationContext, |
|
|
|
this.targetBeanDefinition.getResolvableType(), beanRegistrationCode); |
|
|
|
this.targetBeanDefinition.getResolvableType(), beanRegistrationCode); |
|
|
|
|