Reject @Bean method with void return type
Closes gh-31007
This commit is contained in:
parent
3c34e69cc2
commit
d3d414c3c7
|
|
@ -42,8 +42,13 @@ final class BeanMethod extends ConfigurationMethod {
|
|||
|
||||
@Override
|
||||
public void validate(ProblemReporter problemReporter) {
|
||||
if ("void".equals(getMetadata().getReturnTypeName())) {
|
||||
// declared as void: potential misuse of @Bean, maybe meant as init method instead?
|
||||
problemReporter.error(new VoidDeclaredMethodError());
|
||||
}
|
||||
|
||||
if (getMetadata().isStatic()) {
|
||||
// static @Bean methods have no constraints to validate -> return immediately
|
||||
// static @Bean methods have no further constraints to validate -> return immediately
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -71,6 +76,15 @@ final class BeanMethod extends ConfigurationMethod {
|
|||
}
|
||||
|
||||
|
||||
private class VoidDeclaredMethodError extends Problem {
|
||||
|
||||
VoidDeclaredMethodError() {
|
||||
super("@Bean method '%s' must not be declared as void; change the method's return type or its annotation."
|
||||
.formatted(getMetadata().getMethodName()), getResourceLocation());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private class NonOverridableMethodError extends Problem {
|
||||
|
||||
NonOverridableMethodError() {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2022 the original author or authors.
|
||||
* Copyright 2002-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -143,6 +143,12 @@ class ConfigurationClassProcessingTests {
|
|||
initBeanFactory(ConfigWithFinalBean.class));
|
||||
}
|
||||
|
||||
@Test // gh-31007
|
||||
void voidBeanMethod() {
|
||||
assertThatExceptionOfType(BeanDefinitionParsingException.class).isThrownBy(() ->
|
||||
initBeanFactory(ConfigWithVoidBean.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
void simplestPossibleConfig() {
|
||||
BeanFactory factory = initBeanFactory(SimplestPossibleConfig.class);
|
||||
|
|
@ -432,6 +438,14 @@ class ConfigurationClassProcessingTests {
|
|||
}
|
||||
|
||||
|
||||
@Configuration
|
||||
static class ConfigWithVoidBean {
|
||||
|
||||
public @Bean void testBean() {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Configuration
|
||||
static class SimplestPossibleConfig {
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue