diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionParserDelegate.java b/spring-beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionParserDelegate.java
index af8d44af55..9761263d5d 100644
--- a/spring-beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionParserDelegate.java
+++ b/spring-beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionParserDelegate.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2014 the original author or authors.
+ * Copyright 2002-2015 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.
@@ -332,9 +332,8 @@ public class BeanDefinitionParserDelegate {
/**
* Populate the given DocumentDefaultsDefinition instance with the default lazy-init,
* autowire, dependency check settings, init-method, destroy-method and merge settings.
- * Support nested 'beans' element use cases by falling back to
- * parentDefaults in case the defaults are not explicitly set
- * locally.
+ * Support nested 'beans' element use cases by falling back to parentDefaults
+ * in case the defaults are not explicitly set locally.
* @param defaults the defaults to populate
* @param parentDefaults the parent BeanDefinitionParserDelegate (if any) defaults to fall back to
* @param root the root element of the current bean definition document (or nested beans element)
@@ -342,25 +341,27 @@ public class BeanDefinitionParserDelegate {
protected void populateDefaults(DocumentDefaultsDefinition defaults, DocumentDefaultsDefinition parentDefaults, Element root) {
String lazyInit = root.getAttribute(DEFAULT_LAZY_INIT_ATTRIBUTE);
if (DEFAULT_VALUE.equals(lazyInit)) {
- lazyInit = parentDefaults != null ? parentDefaults.getLazyInit() : FALSE_VALUE;
+ // Potentially inherited from outer sections, otherwise falling back to false.
+ lazyInit = (parentDefaults != null ? parentDefaults.getLazyInit() : FALSE_VALUE);
}
defaults.setLazyInit(lazyInit);
String merge = root.getAttribute(DEFAULT_MERGE_ATTRIBUTE);
if (DEFAULT_VALUE.equals(merge)) {
- merge = parentDefaults != null ? parentDefaults.getMerge() : FALSE_VALUE;
+ // Potentially inherited from outer sections, otherwise falling back to false.
+ merge = (parentDefaults != null ? parentDefaults.getMerge() : FALSE_VALUE);
}
defaults.setMerge(merge);
String autowire = root.getAttribute(DEFAULT_AUTOWIRE_ATTRIBUTE);
if (DEFAULT_VALUE.equals(autowire)) {
- autowire = parentDefaults != null ? parentDefaults.getAutowire() : AUTOWIRE_NO_VALUE;
+ // Potentially inherited from outer sections, otherwise falling back to 'no'.
+ autowire = (parentDefaults != null ? parentDefaults.getAutowire() : AUTOWIRE_NO_VALUE);
}
defaults.setAutowire(autowire);
- // don't fall back to parentDefaults for dependency-check as it's no
- // longer supported in as of 3.0. Therefore, no nested
- // would ever need to fall back to it.
+ // Don't fall back to parentDefaults for dependency-check as it's no longer supported in
+ // as of 3.0. Therefore, no nested would ever need to fall back to it.
defaults.setDependencyCheck(root.getAttribute(DEFAULT_DEPENDENCY_CHECK_ATTRIBUTE));
if (root.hasAttribute(DEFAULT_AUTOWIRE_CANDIDATES_ATTRIBUTE)) {
diff --git a/spring-beans/src/main/resources/org/springframework/beans/factory/xml/spring-beans-4.2.xsd b/spring-beans/src/main/resources/org/springframework/beans/factory/xml/spring-beans-4.2.xsd
index a193b9645a..c77e0250e1 100644
--- a/spring-beans/src/main/resources/org/springframework/beans/factory/xml/spring-beans-4.2.xsd
+++ b/spring-beans/src/main/resources/org/springframework/beans/factory/xml/spring-beans-4.2.xsd
@@ -113,16 +113,19 @@
@@ -130,7 +133,9 @@
@@ -328,13 +333,15 @@
@@ -344,7 +351,7 @@
Controls whether bean properties are "autowired".
This is an automagical process in which bean references don't need
to be coded explicitly in the XML bean definition file, but rather the
- Spring container works out dependencies.
+ Spring container works out dependencies. The effective default is "no".
There are 4 modes:
@@ -379,7 +386,10 @@
elements, always override autowiring.
Note: This attribute will not be inherited by child bean definitions.
- Hence, it needs to be specified per concrete bean definition.
+ Hence, it needs to be specified per concrete bean definition. It can be
+ shared through the 'default-autowire' attribute at the 'beans' level
+ and potentially inherited from outer 'beans' defaults in case of nested
+ 'beans' sections (e.g. with different profiles).
]]>
diff --git a/src/asciidoc/core-beans.adoc b/src/asciidoc/core-beans.adoc
index 8bf67da655..fe4d7f0a11 100644
--- a/src/asciidoc/core-beans.adoc
+++ b/src/asciidoc/core-beans.adoc
@@ -1858,7 +1858,7 @@ advantages:
When using XML-based configuration metadata footnote:[See
pass:specialcharacters,macros[<>]], you specify autowire
mode for a bean definition with the `autowire` attribute of the `` element. The
-autowiring functionality has five modes. You specify autowiring __per__ bean and thus
+autowiring functionality has four modes. You specify autowiring __per__ bean and thus
can choose which ones to autowire.
[[beans-factory-autowiring-modes-tbl]]