From 6563405be5308954394b67608f09af35e7d35b59 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 3 Sep 2014 12:59:51 +0200 Subject: [PATCH] ImportRegistry as a package-visible top-level interface which can easily be shared within the package Issue: SPR-12128 --- ...onfigurationClassBeanDefinitionReader.java | 17 ++++------ .../annotation/ConfigurationClassParser.java | 8 ----- .../ConfigurationClassPostProcessor.java | 1 - .../context/annotation/ImportRegistry.java | 31 +++++++++++++++++++ .../context/annotation/ImportAwareTests.java | 3 +- 5 files changed, 38 insertions(+), 22 deletions(-) create mode 100644 spring-context/src/main/java/org/springframework/context/annotation/ImportRegistry.java diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassBeanDefinitionReader.java b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassBeanDefinitionReader.java index 466b2fdf5ce..7de16bf2908 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassBeanDefinitionReader.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassBeanDefinitionReader.java @@ -44,7 +44,6 @@ import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.BeanNameGenerator; import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; -import org.springframework.context.annotation.ConfigurationClassParser.ImportRegistry; import org.springframework.context.annotation.ConfigurationCondition.ConfigurationPhase; import org.springframework.core.annotation.AnnotationAttributes; import org.springframework.core.env.Environment; @@ -96,7 +95,7 @@ class ConfigurationClassBeanDefinitionReader { * Create a new {@link ConfigurationClassBeanDefinitionReader} instance that will be used * to populate the given {@link BeanDefinitionRegistry}. */ - public ConfigurationClassBeanDefinitionReader(BeanDefinitionRegistry registry, SourceExtractor sourceExtractor, + ConfigurationClassBeanDefinitionReader(BeanDefinitionRegistry registry, SourceExtractor sourceExtractor, ProblemReporter problemReporter, MetadataReaderFactory metadataReaderFactory, ResourceLoader resourceLoader, Environment environment, BeanNameGenerator importBeanNameGenerator, ImportRegistry importRegistry) { @@ -132,8 +131,11 @@ class ConfigurationClassBeanDefinitionReader { TrackedConditionEvaluator trackedConditionEvaluator) { if (trackedConditionEvaluator.shouldSkip(configClass)) { - removeBeanDefinition(configClass); - importRegistry.removeImportingClassFor(configClass.getMetadata().getClassName()); + String beanName = configClass.getBeanName(); + if (StringUtils.hasLength(beanName) && this.registry.containsBeanDefinition(beanName)) { + this.registry.removeBeanDefinition(beanName); + } + this.importRegistry.removeImportingClassFor(configClass.getMetadata().getClassName()); return; } @@ -147,13 +149,6 @@ class ConfigurationClassBeanDefinitionReader { loadBeanDefinitionsFromRegistrars(configClass.getImportBeanDefinitionRegistrars()); } - private void removeBeanDefinition(ConfigurationClass configClass) { - String beanName = configClass.getBeanName(); - if (StringUtils.hasLength(beanName) && this.registry.containsBeanDefinition(beanName)) { - this.registry.removeBeanDefinition(beanName); - } - } - /** * Register the {@link Configuration} class itself as a bean definition. */ diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java index 1bdff1bc919..452823b4af0 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java @@ -588,14 +588,6 @@ class ConfigurationClassParser { } - interface ImportRegistry { - - AnnotationMetadata getImportingClassFor(String importedClass); - - void removeImportingClassFor(String importedClass); - } - - @SuppressWarnings("serial") private static class ImportStack extends Stack implements ImportRegistry { diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java index 6743f70c092..f5e8f9a099c 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java @@ -53,7 +53,6 @@ import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.context.EnvironmentAware; import org.springframework.context.ResourceLoaderAware; import org.springframework.context.annotation.ConfigurationClassEnhancer.EnhancedConfiguration; -import org.springframework.context.annotation.ConfigurationClassParser.ImportRegistry; import org.springframework.core.Ordered; import org.springframework.core.PriorityOrdered; import org.springframework.core.env.Environment; diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ImportRegistry.java b/spring-context/src/main/java/org/springframework/context/annotation/ImportRegistry.java new file mode 100644 index 00000000000..2d20ab17d7e --- /dev/null +++ b/spring-context/src/main/java/org/springframework/context/annotation/ImportRegistry.java @@ -0,0 +1,31 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.context.annotation; + +import org.springframework.core.type.AnnotationMetadata; + +/** + * @author Juergen Hoeller + * @author Phil Webb + */ +interface ImportRegistry { + + AnnotationMetadata getImportingClassFor(String importedClass); + + void removeImportingClassFor(String importedClass); + +} diff --git a/spring-context/src/test/java/org/springframework/context/annotation/ImportAwareTests.java b/spring-context/src/test/java/org/springframework/context/annotation/ImportAwareTests.java index cdea59f98ac..2f1bc499e8a 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation/ImportAwareTests.java +++ b/spring-context/src/test/java/org/springframework/context/annotation/ImportAwareTests.java @@ -281,8 +281,7 @@ public class ImportAwareTests { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { - return context.getBeanFactory().getBeanNamesForType(MetadataHolder.class, - true, false).length == 0; + return (context.getBeanFactory().getBeanNamesForType(MetadataHolder.class, true, false).length == 0); } @Override