diff --git a/framework-docs/framework-docs.gradle b/framework-docs/framework-docs.gradle index 83ab4ed43a9..a4cd3851a58 100644 --- a/framework-docs/framework-docs.gradle +++ b/framework-docs/framework-docs.gradle @@ -20,6 +20,10 @@ antora { ] } +node { + version = '24.15.0' +} + tasks.named("generateAntoraYml") { asciidocAttributes = project.provider( { return ["spring-version": project.version ] diff --git a/framework-docs/modules/ROOT/pages/core/beans/java/composing-configuration-classes.adoc b/framework-docs/modules/ROOT/pages/core/beans/java/composing-configuration-classes.adoc index 89257f072f5..3bd4eaf272e 100644 --- a/framework-docs/modules/ROOT/pages/core/beans/java/composing-configuration-classes.adoc +++ b/framework-docs/modules/ROOT/pages/core/beans/java/composing-configuration-classes.adoc @@ -610,6 +610,19 @@ Kotlin:: See the {spring-framework-api}/context/annotation/Conditional.html[`@Conditional`] javadoc for more detail. +[NOTE] +==== +A `@Conditional` annotation declared on an enclosing `@Configuration` class is only +applied to the registration of a nested `@Configuration` class if the nested class is +reached through the parser's recursion from its enclosing class, or via `@Import`. If a +nested class is discovered independently of its enclosing class — for example, via +`@ComponentScan` or by directly registering it against the application context — it is +processed using only its own `@Conditional` annotations. Thus, if you wish to ensure that +the same `@Conditional` annotations apply in such scenarios, you must redeclare the +relevant annotations on the nested class, or extract them into a composed annotation +which you apply to both the enclosing class and the nested class. +==== + [[beans-java-combining]] == Combining Java and XML Configuration diff --git a/spring-context/src/main/java/org/springframework/context/annotation/Configuration.java b/spring-context/src/main/java/org/springframework/context/annotation/Configuration.java index 95d683ca359..6be5fafc8b6 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/Configuration.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/Configuration.java @@ -341,6 +341,18 @@ import org.springframework.stereotype.Component; * with the {@code @Profile} annotation to provide two options of the same bean to the * enclosing {@code @Configuration} class. * + *
A {@link Conditional @Conditional} annotation declared on an enclosing + * {@code @Configuration} class is only applied to the registration of a nested + * {@code @Configuration} class if the nested class is reached through the parser's + * recursion from its enclosing class, or via {@link Import @Import}. If a nested + * class is discovered independently of its enclosing class — for example, + * via {@link ComponentScan @ComponentScan} or by directly registering it against + * the application context — it is processed using only its own + * {@code @Conditional} annotations. Thus, if you wish to ensure that the same + * {@code @Conditional} annotations apply in such scenarios, you must redeclare + * the relevant annotations on the nested class, or extract them into a composed + * annotation which you apply to both the enclosing class and the nested class. + * *
By default, {@code @Bean} methods will be eagerly instantiated at container