Skip to content

Commit 2d942a6

Browse files
committed
Merge branch '6.1.x'
2 parents 168276a + 5b1278d commit 2d942a6

File tree

3 files changed

+36
-9
lines changed

3 files changed

+36
-9
lines changed

Diff for: spring-beans/src/main/java/org/springframework/beans/factory/aot/DefaultBeanRegistrationCodeFragments.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,9 @@ class DefaultBeanRegistrationCodeFragments implements BeanRegistrationCodeFragme
7979
@Override
8080
public ClassName getTarget(RegisteredBean registeredBean) {
8181
if (hasInstanceSupplier()) {
82-
throw new IllegalStateException("Default code generation is not supported for bean definitions "
83-
+ "declaring an instance supplier callback: " + registeredBean.getMergedBeanDefinition());
82+
String resourceDescription = registeredBean.getMergedBeanDefinition().getResourceDescription();
83+
throw new IllegalStateException("Error processing bean with name '" + registeredBean.getBeanName() + "'" +
84+
(resourceDescription != null ? " defined in " + resourceDescription : "") + ": instance supplier is not supported");
8485
}
8586
Class<?> target = extractDeclaringClass(registeredBean, this.instantiationDescriptor.get());
8687
while (target.getName().startsWith("java.") && registeredBean.isInnerBean()) {

Diff for: spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionMethodGeneratorTests.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -692,8 +692,8 @@ void generateBeanDefinitionMethodWhenInstanceSupplierWithNoCustomization() {
692692
this.methodGeneratorFactory, registeredBean, null,
693693
List.of());
694694
assertThatIllegalStateException().isThrownBy(() -> generator.generateBeanDefinitionMethod(
695-
this.generationContext, this.beanRegistrationsCode)).withMessageStartingWith(
696-
"Default code generation is not supported for bean definitions declaring an instance supplier callback");
695+
this.generationContext, this.beanRegistrationsCode)).withMessage(
696+
"Error processing bean with name 'testBean': instance supplier is not supported");
697697
}
698698

699699
@Test
@@ -729,8 +729,8 @@ public CodeBlock generateInstanceSupplierCode(GenerationContext generationContex
729729
this.methodGeneratorFactory, registeredBean, null,
730730
List.of(aotContribution));
731731
assertThatIllegalStateException().isThrownBy(() -> generator.generateBeanDefinitionMethod(
732-
this.generationContext, this.beanRegistrationsCode)).withMessageStartingWith(
733-
"Default code generation is not supported for bean definitions declaring an instance supplier callback");
732+
this.generationContext, this.beanRegistrationsCode)).withMessage(
733+
"Error processing bean with name 'testBean': instance supplier is not supported");
734734
}
735735

736736
@Test

Diff for: spring-beans/src/test/java/org/springframework/beans/factory/aot/DefaultBeanRegistrationCodeFragmentsTests.java

+29-3
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.springframework.util.ReflectionUtils;
4949

5050
import static org.assertj.core.api.Assertions.assertThat;
51+
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
5152
import static org.mockito.Mockito.never;
5253
import static org.mockito.Mockito.spy;
5354
import static org.mockito.Mockito.verify;
@@ -65,6 +66,28 @@ class DefaultBeanRegistrationCodeFragmentsTests {
6566

6667
private final DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
6768

69+
@Test
70+
public void getTargetWithInstanceSupplier() {
71+
RootBeanDefinition beanDefinition = new RootBeanDefinition(SimpleBean.class);
72+
beanDefinition.setInstanceSupplier(SimpleBean::new);
73+
RegisteredBean registeredBean = registerTestBean(beanDefinition);
74+
BeanRegistrationCodeFragments codeFragments = createInstance(registeredBean);
75+
assertThatIllegalStateException().isThrownBy(() -> codeFragments.getTarget(registeredBean))
76+
.withMessageContaining("Error processing bean with name 'testBean': instance supplier is not supported");
77+
}
78+
79+
@Test
80+
public void getTargetWithInstanceSupplierAndResourceDescription() {
81+
RootBeanDefinition beanDefinition = new RootBeanDefinition(SimpleBean.class);
82+
beanDefinition.setInstanceSupplier(SimpleBean::new);
83+
beanDefinition.setResourceDescription("my test resource");
84+
RegisteredBean registeredBean = registerTestBean(beanDefinition);
85+
BeanRegistrationCodeFragments codeFragments = createInstance(registeredBean);
86+
assertThatIllegalStateException().isThrownBy(() -> codeFragments.getTarget(registeredBean))
87+
.withMessageContaining("Error processing bean with name 'testBean' defined in my test resource: "
88+
+ "instance supplier is not supported");
89+
}
90+
6891
@Test
6992
void getTargetOnConstructor() {
7093
RegisteredBean registeredBean = registerTestBean(SimpleBean.class,
@@ -257,13 +280,16 @@ private RegisteredBean registerTestBean(Class<?> beanType,
257280
return RegisteredBean.of(this.beanFactory, "testBean");
258281
}
259282

260-
261283
private RegisteredBean registerTestBean(ResolvableType beanType,
262284
@Nullable Executable constructorOrFactoryMethod) {
263285
RootBeanDefinition beanDefinition = new RootBeanDefinition();
264286
beanDefinition.setTargetType(beanType);
265-
this.beanFactory.registerBeanDefinition("testBean",
266-
applyConstructorOrFactoryMethod(beanDefinition, constructorOrFactoryMethod));
287+
return registerTestBean(applyConstructorOrFactoryMethod(
288+
beanDefinition, constructorOrFactoryMethod));
289+
}
290+
291+
private RegisteredBean registerTestBean(RootBeanDefinition beanDefinition) {
292+
this.beanFactory.registerBeanDefinition("testBean", beanDefinition);
267293
return RegisteredBean.of(this.beanFactory, "testBean");
268294
}
269295

0 commit comments

Comments
 (0)