Add AOT support for by-type RuntimeBeanReference
Closes gh-28841
This commit is contained in:
parent
cd4f4d978d
commit
1acb41ff43
|
|
@ -513,7 +513,12 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public CodeBlock generateCode(Object value, ResolvableType type) {
|
public CodeBlock generateCode(Object value, ResolvableType type) {
|
||||||
if (value instanceof BeanReference beanReference) {
|
if (value instanceof RuntimeBeanReference runtimeBeanReference
|
||||||
|
&& runtimeBeanReference.getBeanType() != null) {
|
||||||
|
return CodeBlock.of("new $T($T.class)", RuntimeBeanReference.class,
|
||||||
|
runtimeBeanReference.getBeanType());
|
||||||
|
}
|
||||||
|
else if (value instanceof BeanReference beanReference) {
|
||||||
return CodeBlock.of("new $T($S)", RuntimeBeanReference.class,
|
return CodeBlock.of("new $T($S)", RuntimeBeanReference.class,
|
||||||
beanReference.getBeanName());
|
beanReference.getBeanName());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@ import org.springframework.aot.test.generator.compile.Compiled;
|
||||||
import org.springframework.aot.test.generator.compile.TestCompiler;
|
import org.springframework.aot.test.generator.compile.TestCompiler;
|
||||||
import org.springframework.beans.factory.config.BeanReference;
|
import org.springframework.beans.factory.config.BeanReference;
|
||||||
import org.springframework.beans.factory.config.RuntimeBeanNameReference;
|
import org.springframework.beans.factory.config.RuntimeBeanNameReference;
|
||||||
|
import org.springframework.beans.factory.config.RuntimeBeanReference;
|
||||||
import org.springframework.beans.factory.support.ManagedList;
|
import org.springframework.beans.factory.support.ManagedList;
|
||||||
import org.springframework.beans.factory.support.ManagedMap;
|
import org.springframework.beans.factory.support.ManagedMap;
|
||||||
import org.springframework.beans.factory.support.ManagedSet;
|
import org.springframework.beans.factory.support.ManagedSet;
|
||||||
|
|
@ -465,10 +466,31 @@ class BeanDefinitionPropertyValueCodeGeneratorTests {
|
||||||
class BeanReferenceTests {
|
class BeanReferenceTests {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void generatedWhenBeanReference() {
|
void generatedWhenBeanNameReference() {
|
||||||
BeanReference beanReference = new RuntimeBeanNameReference("test");
|
RuntimeBeanNameReference beanReference = new RuntimeBeanNameReference("test");
|
||||||
compile(beanReference, (instance, compiler) ->
|
compile(beanReference, (instance, compiler) -> {
|
||||||
assertThat(((BeanReference) instance).getBeanName()).isEqualTo(beanReference.getBeanName()));
|
RuntimeBeanReference actual = (RuntimeBeanReference) instance;
|
||||||
|
assertThat(actual.getBeanName()).isEqualTo(beanReference.getBeanName());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void generatedWhenBeanReferenceByName() {
|
||||||
|
RuntimeBeanReference beanReference = new RuntimeBeanReference("test");
|
||||||
|
compile(beanReference, (instance, compiler) -> {
|
||||||
|
RuntimeBeanReference actual = (RuntimeBeanReference) instance;
|
||||||
|
assertThat(actual.getBeanName()).isEqualTo(beanReference.getBeanName());
|
||||||
|
assertThat(actual.getBeanType()).isEqualTo(beanReference.getBeanType());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void generatedWhenBeanReferenceByType() {
|
||||||
|
BeanReference beanReference = new RuntimeBeanReference(String.class);
|
||||||
|
compile(beanReference, (instance, compiler) -> {
|
||||||
|
RuntimeBeanReference actual = (RuntimeBeanReference) instance;
|
||||||
|
assertThat(actual.getBeanType()).isEqualTo(String.class);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue