diff --git a/spring-beans-groovy/src/main/java/org/springframework/beans/factory/groovy/GroovyBeanDefinitionReader.java b/spring-beans-groovy/src/main/java/org/springframework/beans/factory/groovy/GroovyBeanDefinitionReader.java index 0146c39b79..310751a3d5 100644 --- a/spring-beans-groovy/src/main/java/org/springframework/beans/factory/groovy/GroovyBeanDefinitionReader.java +++ b/spring-beans-groovy/src/main/java/org/springframework/beans/factory/groovy/GroovyBeanDefinitionReader.java @@ -671,7 +671,7 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp private GroovyDynamicElementReader createDynamicElementReader(String namespace) { XmlReaderContext readerContext = this.xmlBeanDefinitionReader.createReaderContext(new DescriptiveResource("Groovy")); - BeanDefinitionParserDelegate delegate = new BeanDefinitionParserDelegate(readerContext, getEnvironment()); + BeanDefinitionParserDelegate delegate = new BeanDefinitionParserDelegate(readerContext); boolean decorating = (this.currentBeanDefinition != null); if (!decorating) { this.currentBeanDefinition = new GroovyBeanDefinitionWrapper(namespace); diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionDocumentReader.java b/spring-beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionDocumentReader.java index ffe9d294d9..86e5fd9f5a 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionDocumentReader.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionDocumentReader.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 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. @@ -41,7 +41,9 @@ public interface BeanDefinitionDocumentReader { * Set the Environment to use when reading bean definitions. *

Used for evaluating profile information to determine whether a * {@code } document/element should be included or ignored. + * @deprecated in favor of {@link XmlReaderContext#getEnvironment()} */ + @Deprecated void setEnvironment(Environment environment); /** 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 37cd92132d..d84c08aacd 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 @@ -59,7 +59,6 @@ import org.springframework.beans.factory.support.ManagedSet; import org.springframework.beans.factory.support.MethodOverrides; import org.springframework.beans.factory.support.ReplaceOverride; import org.springframework.core.env.Environment; -import org.springframework.core.env.StandardEnvironment; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; import org.springframework.util.CollectionUtils; @@ -246,8 +245,6 @@ public class BeanDefinitionParserDelegate { private final XmlReaderContext readerContext; - private final Environment environment; - private final DocumentDefaultsDefinition defaults = new DocumentDefaultsDefinition(); private final ParseState parseState = new ParseState(); @@ -261,25 +258,23 @@ public class BeanDefinitionParserDelegate { /** - * Create a new BeanDefinitionParserDelegate associated with the - * supplied {@link XmlReaderContext} and {@link Environment}. + * Create a new BeanDefinitionParserDelegate associated with the supplied + * {@link XmlReaderContext}. */ - public BeanDefinitionParserDelegate(XmlReaderContext readerContext, Environment environment) { + public BeanDefinitionParserDelegate(XmlReaderContext readerContext) { Assert.notNull(readerContext, "XmlReaderContext must not be null"); - Assert.notNull(environment, "Environment must not be null"); this.readerContext = readerContext; - this.environment = environment; } /** - * Create a new BeanDefinitionParserDelegate associated with the - * supplied {@link XmlReaderContext} and a new {@link StandardEnvironment}. - * @deprecated since Spring 3.1 in favor of - * {@link #BeanDefinitionParserDelegate(XmlReaderContext, Environment)} + * Create a new BeanDefinitionParserDelegate associated with the supplied + * {@link XmlReaderContext}. + * @deprecated since the given {@link Environment} parameter is effectively + * ignored in favor of {@link XmlReaderContext#getEnvironment()} */ @Deprecated - public BeanDefinitionParserDelegate(XmlReaderContext readerContext) { - this(readerContext, new StandardEnvironment()); + public BeanDefinitionParserDelegate(XmlReaderContext readerContext, Environment environment) { + this(readerContext); } @@ -292,9 +287,11 @@ public class BeanDefinitionParserDelegate { /** * Get the {@link Environment} associated with this helper instance. + * @deprecated in favor of {@link XmlReaderContext#getEnvironment()} */ + @Deprecated public final Environment getEnvironment() { - return this.environment; + return this.readerContext.getEnvironment(); } /** diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/xml/DefaultBeanDefinitionDocumentReader.java b/spring-beans/src/main/java/org/springframework/beans/factory/xml/DefaultBeanDefinitionDocumentReader.java index e503f1bca2..bceec42ff9 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/xml/DefaultBeanDefinitionDocumentReader.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/xml/DefaultBeanDefinitionDocumentReader.java @@ -35,7 +35,6 @@ import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.core.env.Environment; import org.springframework.core.io.Resource; import org.springframework.core.io.support.ResourcePatternUtils; -import org.springframework.util.Assert; import org.springframework.util.ResourceUtils; import org.springframework.util.StringUtils; @@ -77,27 +76,18 @@ public class DefaultBeanDefinitionDocumentReader implements BeanDefinitionDocume protected final Log logger = LogFactory.getLog(getClass()); - private Environment environment; - private XmlReaderContext readerContext; private BeanDefinitionParserDelegate delegate; - /** - * {@inheritDoc} - *

Default value is {@code null}; property is required for parsing any - * {@code } element with a {@code profile} attribute present. - * @see #doRegisterBeanDefinitions - */ + @Deprecated @Override public void setEnvironment(Environment environment) { - this.environment = environment; } /** - * {@inheritDoc} - *

This implementation parses bean definitions according to the "spring-beans" XSD + * This implementation parses bean definitions according to the "spring-beans" XSD * (or DTD, historically). *

Opens a DOM Document; then initializes the default settings * specified at the {@code } level; then parses the contained bean definitions. @@ -110,12 +100,24 @@ public class DefaultBeanDefinitionDocumentReader implements BeanDefinitionDocume doRegisterBeanDefinitions(root); } + /** + * Return the descriptor for the XML resource that this parser works on. + */ + protected final XmlReaderContext getReaderContext() { + return this.readerContext; + } + + /** + * Invoke the {@link org.springframework.beans.factory.parsing.SourceExtractor} to pull the + * source metadata from the supplied {@link Element}. + */ + protected Object extractSource(Element ele) { + return getReaderContext().extractSource(ele); + } + /** * Register each bean definition within the given root {@code } element. - * @throws IllegalStateException if {@code elements will cause recursion in this method. In @@ -125,15 +127,14 @@ public class DefaultBeanDefinitionDocumentReader implements BeanDefinitionDocume // then ultimately reset this.delegate back to its original (parent) reference. // this behavior emulates a stack of delegates without actually necessitating one. BeanDefinitionParserDelegate parent = this.delegate; - this.delegate = createDelegate(this.readerContext, root, parent); + this.delegate = createDelegate(getReaderContext(), root, parent); if (this.delegate.isDefaultNamespace(root)) { String profileSpec = root.getAttribute(PROFILE_ATTRIBUTE); if (StringUtils.hasText(profileSpec)) { - Assert.state(this.environment != null, "Environment must be set for evaluating profiles"); String[] specifiedProfiles = StringUtils.tokenizeToStringArray( profileSpec, BeanDefinitionParserDelegate.MULTI_VALUE_ATTRIBUTE_DELIMITERS); - if (!this.environment.acceptsProfiles(specifiedProfiles)) { + if (!getReaderContext().getEnvironment().acceptsProfiles(specifiedProfiles)) { return; } } @@ -149,27 +150,11 @@ public class DefaultBeanDefinitionDocumentReader implements BeanDefinitionDocume protected BeanDefinitionParserDelegate createDelegate( XmlReaderContext readerContext, Element root, BeanDefinitionParserDelegate parentDelegate) { - BeanDefinitionParserDelegate delegate = new BeanDefinitionParserDelegate(readerContext, this.environment); + BeanDefinitionParserDelegate delegate = new BeanDefinitionParserDelegate(readerContext); delegate.initDefaults(root, parentDelegate); return delegate; } - /** - * Return the descriptor for the XML resource that this parser works on. - */ - protected final XmlReaderContext getReaderContext() { - return this.readerContext; - } - - /** - * Invoke the {@link org.springframework.beans.factory.parsing.SourceExtractor} to pull the - * source metadata from the supplied {@link Element}. - */ - protected Object extractSource(Element ele) { - return this.readerContext.extractSource(ele); - } - - /** * Parse the elements at the root level in the document: * "import", "alias", "bean". @@ -224,7 +209,7 @@ public class DefaultBeanDefinitionDocumentReader implements BeanDefinitionDocume } // Resolve system properties: e.g. "${user.dir}" - location = environment.resolveRequiredPlaceholders(location); + location = getReaderContext().getEnvironment().resolveRequiredPlaceholders(location); Set actualResources = new LinkedHashSet(4); diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/xml/XmlBeanDefinitionReader.java b/spring-beans/src/main/java/org/springframework/beans/factory/xml/XmlBeanDefinitionReader.java index c62b365089..e6a1d59e19 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/xml/XmlBeanDefinitionReader.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/xml/XmlBeanDefinitionReader.java @@ -135,6 +135,7 @@ public class XmlBeanDefinitionReader extends AbstractBeanDefinitionReader { super(registry); } + /** * Set whether to use XML validation. Default is {@code true}. *

This method switches namespace awareness on if validation is turned off, @@ -501,9 +502,10 @@ public class XmlBeanDefinitionReader extends AbstractBeanDefinitionReader { * @see #setDocumentReaderClass * @see BeanDefinitionDocumentReader#registerBeanDefinitions */ + @SuppressWarnings("deprecation") public int registerBeanDefinitions(Document doc, Resource resource) throws BeanDefinitionStoreException { BeanDefinitionDocumentReader documentReader = createBeanDefinitionDocumentReader(); - documentReader.setEnvironment(this.getEnvironment()); + documentReader.setEnvironment(getEnvironment()); int countBefore = getRegistry().getBeanDefinitionCount(); documentReader.registerBeanDefinitions(doc, createReaderContext(resource)); return getRegistry().getBeanDefinitionCount() - countBefore; diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/xml/XmlReaderContext.java b/spring-beans/src/main/java/org/springframework/beans/factory/xml/XmlReaderContext.java index 5b4b0629cb..4366c641e0 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/xml/XmlReaderContext.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/xml/XmlReaderContext.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 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. @@ -28,6 +28,7 @@ import org.springframework.beans.factory.parsing.ReaderContext; import org.springframework.beans.factory.parsing.ReaderEventListener; import org.springframework.beans.factory.parsing.SourceExtractor; import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.core.env.Environment; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; @@ -74,6 +75,10 @@ public class XmlReaderContext extends ReaderContext { return this.reader.getBeanClassLoader(); } + public final Environment getEnvironment() { + return this.reader.getEnvironment(); + } + public final NamespaceHandlerResolver getNamespaceHandlerResolver() { return this.namespaceHandlerResolver; } diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ClassPathBeanDefinitionScanner.java b/spring-context/src/main/java/org/springframework/context/annotation/ClassPathBeanDefinitionScanner.java index 3dc1b841bc..b811d52d4c 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ClassPathBeanDefinitionScanner.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ClassPathBeanDefinitionScanner.java @@ -103,8 +103,7 @@ public class ClassPathBeanDefinitionScanner extends ClassPathScanningCandidateCo * {@link org.springframework.stereotype.Component @Component}, * {@link org.springframework.stereotype.Repository @Repository}, * {@link org.springframework.stereotype.Service @Service}, and - * {@link org.springframework.stereotype.Controller @Controller} stereotype - * annotations. + * {@link org.springframework.stereotype.Controller @Controller} stereotype annotations * @see #setResourceLoader * @see #setEnvironment */ @@ -124,13 +123,12 @@ public class ClassPathBeanDefinitionScanner extends ClassPathScanningCandidateCo * @param registry the {@code BeanFactory} to load bean definitions into, in the form * of a {@code BeanDefinitionRegistry} * @param useDefaultFilters whether to include the default filters for the - * @param environment the Spring {@link Environment} to use when evaluating bean - * definition profile metadata. * {@link org.springframework.stereotype.Component @Component}, * {@link org.springframework.stereotype.Repository @Repository}, * {@link org.springframework.stereotype.Service @Service}, and - * {@link org.springframework.stereotype.Controller @Controller} stereotype - * annotations. + * {@link org.springframework.stereotype.Controller @Controller} stereotype annotations + * @param environment the Spring {@link Environment} to use when evaluating bean + * definition profile metadata * @since 3.1 * @see #setResourceLoader */ diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ClassPathScanningCandidateComponentProvider.java b/spring-context/src/main/java/org/springframework/context/annotation/ClassPathScanningCandidateComponentProvider.java index 71ebcf0395..86a904810c 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ClassPathScanningCandidateComponentProvider.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ClassPathScanningCandidateComponentProvider.java @@ -115,6 +115,7 @@ public class ClassPathScanningCandidateComponentProvider implements EnvironmentC if (useDefaultFilters) { registerDefaultFilters(); } + Assert.notNull(environment, "Environment must not be null"); this.environment = environment; } @@ -161,10 +162,11 @@ public class ClassPathScanningCandidateComponentProvider implements EnvironmentC /** * Set the Environment to use when resolving placeholders and evaluating * {@link Conditional @Conditional}-annotated component classes. - *

The default is a {@link StandardEnvironment} + *

The default is a {@link StandardEnvironment}. * @param environment the Environment to use */ public void setEnvironment(Environment environment) { + Assert.notNull(environment, "Environment must not be null"); this.environment = environment; this.conditionEvaluator = null; }