From 1a8f0d6a9e37d12b31a2fe7bc1fbc2c91700a08e Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Fri, 19 Jul 2013 13:10:16 -0700 Subject: [PATCH] Resolve ${} placeholders in @ImportResource Update ConfigurationClassParser to resolve any ${} placeholders from @ImportResource values. Issue: SPR-10686 --- .../annotation/ConfigurationClassParser.java | 3 ++- .../configuration/ImportResourceTests.java | 25 ++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) 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 ba0052358a..6e06766437 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 @@ -257,7 +257,8 @@ class ConfigurationClassParser { String[] resources = importResource.getStringArray("value"); Class readerClass = importResource.getClass("reader"); for (String resource : resources) { - configClass.addImportedResource(resource, readerClass); + String resolvedResource = this.environment.resolveRequiredPlaceholders(resource); + configClass.addImportedResource(resolvedResource, readerClass); } } diff --git a/spring-context/src/test/java/org/springframework/context/annotation/configuration/ImportResourceTests.java b/spring-context/src/test/java/org/springframework/context/annotation/configuration/ImportResourceTests.java index 6bb97b2a95..304c37ab16 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation/configuration/ImportResourceTests.java +++ b/spring-context/src/test/java/org/springframework/context/annotation/configuration/ImportResourceTests.java @@ -16,14 +16,17 @@ package org.springframework.context.annotation.configuration; +import java.util.Collections; + import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; + import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; + import org.junit.Ignore; import org.junit.Test; import org.springframework.tests.sample.beans.TestBean; - import org.springframework.aop.support.AopUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -34,6 +37,8 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportResource; +import org.springframework.core.env.MapPropertySource; +import org.springframework.core.env.PropertySource; /** * Integration tests for {@link ImportResource} support. @@ -178,4 +183,22 @@ public class ImportResourceTests { reader=XmlBeanDefinitionReader.class) static class SubResourceConfig extends ImportNonXmlResourceConfig { } + + @Test + public void importWithPlaceHolder() throws Exception { + AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); + PropertySource propertySource = new MapPropertySource("test", + Collections. singletonMap("test", "springframework")); + ctx.getEnvironment().getPropertySources().addFirst(propertySource); + ctx.register(ImportXmlConfig.class); + ctx.refresh(); + assertTrue("did not contain xml-declared bean", ctx.containsBean("xmlDeclaredBean")); + } + + @Configuration + @ImportResource("classpath:org/${test}/context/annotation/configuration/ImportXmlConfig-context.xml") + static class ImportWithPlaceHolder { + } + + }