Browse Source

Merge branch '6.2.x'

pull/34696/head
Sam Brannen 12 months ago
parent
commit
b2af1af50f
  1. 5
      spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java
  2. 24
      spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorTests.java

5
spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java

@ -180,8 +180,9 @@ class ConfigurationClassParser { @@ -180,8 +180,9 @@ class ConfigurationClassParser {
}
// Downgrade to lite (no enhancement) in case of no instance-level @Bean methods.
if (!configClass.hasNonStaticBeanMethods() && ConfigurationClassUtils.CONFIGURATION_CLASS_FULL.equals(
bd.getAttribute(ConfigurationClassUtils.CONFIGURATION_CLASS_ATTRIBUTE))) {
if (!configClass.getMetadata().isAbstract() && !configClass.hasNonStaticBeanMethods() &&
ConfigurationClassUtils.CONFIGURATION_CLASS_FULL.equals(
bd.getAttribute(ConfigurationClassUtils.CONFIGURATION_CLASS_ATTRIBUTE))) {
bd.setAttribute(ConfigurationClassUtils.CONFIGURATION_CLASS_ATTRIBUTE,
ConfigurationClassUtils.CONFIGURATION_CLASS_LITE);
}

24
spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorTests.java

@ -129,6 +129,22 @@ class ConfigurationClassPostProcessorTests { @@ -129,6 +129,22 @@ class ConfigurationClassPostProcessorTests {
assertThat(beanFactory.getDependentBeans("config")).contains("bar");
}
@Test // gh-34663
void enhancementIsPresentForAbstractConfigClassWithoutBeanMethods() {
beanFactory.registerBeanDefinition("config", new RootBeanDefinition(AbstractConfigWithoutBeanMethods.class));
ConfigurationClassPostProcessor pp = new ConfigurationClassPostProcessor();
pp.postProcessBeanFactory(beanFactory);
RootBeanDefinition beanDefinition = (RootBeanDefinition) beanFactory.getBeanDefinition("config");
assertThat(beanDefinition.hasBeanClass()).isTrue();
assertThat(beanDefinition.getBeanClass().getName()).contains(ClassUtils.CGLIB_CLASS_SEPARATOR);
Foo foo = beanFactory.getBean("foo", Foo.class);
Bar bar = beanFactory.getBean("bar", Bar.class);
assertThat(bar.foo).isSameAs(foo);
assertThat(beanFactory.getDependentBeans("foo")).contains("bar");
String[] dependentsOfSingletonBeanConfig = beanFactory.getDependentBeans(SingletonBeanConfig.class.getName());
assertThat(dependentsOfSingletonBeanConfig).containsOnly("foo", "bar");
}
@Test
void enhancementIsNotPresentForProxyBeanMethodsFlagSetToFalse() {
beanFactory.registerBeanDefinition("config", new RootBeanDefinition(NonEnhancedSingletonBeanConfig.class));
@ -181,7 +197,7 @@ class ConfigurationClassPostProcessorTests { @@ -181,7 +197,7 @@ class ConfigurationClassPostProcessorTests {
assertThat(bar.foo).isNotSameAs(foo);
}
@Test
@Test // gh-34486
void enhancementIsNotPresentWithEmptyConfig() {
beanFactory.registerBeanDefinition("config", new RootBeanDefinition(EmptyConfig.class));
ConfigurationClassPostProcessor pp = new ConfigurationClassPostProcessor();
@ -1195,6 +1211,12 @@ class ConfigurationClassPostProcessorTests { @@ -1195,6 +1211,12 @@ class ConfigurationClassPostProcessorTests {
}
}
@Configuration
@Import(SingletonBeanConfig.class)
abstract static class AbstractConfigWithoutBeanMethods {
// This class intentionally does NOT declare @Bean methods.
}
@Configuration
static final class EmptyConfig {
}

Loading…
Cancel
Save