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]]