Simplify AOT contribution for scoped proxies

This commit makes sure that a `ScopedProxyFactoryBean` is exposed in the
container, rather than its underlying proxy. Previously, any lifecycle
method that the proxy target exposed were invoked in the container.

This is a complementary fix to gh-29335
This commit is contained in:
Stephane Nicoll 2022-10-19 16:58:16 +02:00
parent 7f1990e64e
commit affccba8f1
1 changed files with 2 additions and 5 deletions

View File

@ -145,13 +145,11 @@ class ScopedProxyBeanRegistrationAotProcessor implements BeanRegistrationAotProc
GeneratedMethod generatedMethod = beanRegistrationCode.getMethods()
.add("getScopedProxyInstance", method -> {
Class<?> beanClass = this.targetBeanDefinition.getResolvableType()
.toClass();
method.addJavadoc(
"Create the scoped proxy bean instance for '$L'.",
this.registeredBean.getBeanName());
method.addModifiers(Modifier.PRIVATE, Modifier.STATIC);
method.returns(beanClass);
method.returns(ScopedProxyFactoryBean.class);
method.addParameter(RegisteredBean.class,
REGISTERED_BEAN_PARAMETER_NAME);
method.addStatement("$T factory = new $T()",
@ -162,8 +160,7 @@ class ScopedProxyBeanRegistrationAotProcessor implements BeanRegistrationAotProc
method.addStatement(
"factory.setBeanFactory($L.getBeanFactory())",
REGISTERED_BEAN_PARAMETER_NAME);
method.addStatement("return ($T) factory.getObject()",
beanClass);
method.addStatement("return factory");
});
return CodeBlock.of("$T.of($L)", InstanceSupplier.class,
generatedMethod.toMethodReference().toCodeBlock());