Skip to content

Commit 1a8f0d6

Browse files
committed
Resolve ${} placeholders in @ImportResource
Update ConfigurationClassParser to resolve any ${} placeholders from @ImportResource values. Issue: SPR-10686
1 parent 2c030d4 commit 1a8f0d6

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,8 @@ protected final SourceClass doProcessConfigurationClass(
257257
String[] resources = importResource.getStringArray("value");
258258
Class<? extends BeanDefinitionReader> readerClass = importResource.getClass("reader");
259259
for (String resource : resources) {
260-
configClass.addImportedResource(resource, readerClass);
260+
String resolvedResource = this.environment.resolveRequiredPlaceholders(resource);
261+
configClass.addImportedResource(resolvedResource, readerClass);
261262
}
262263
}
263264

spring-context/src/test/java/org/springframework/context/annotation/configuration/ImportResourceTests.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,17 @@
1616

1717
package org.springframework.context.annotation.configuration;
1818

19+
import java.util.Collections;
20+
1921
import org.aspectj.lang.annotation.Aspect;
2022
import org.aspectj.lang.annotation.Before;
23+
2124
import static org.hamcrest.CoreMatchers.*;
2225
import static org.junit.Assert.*;
26+
2327
import org.junit.Ignore;
2428
import org.junit.Test;
2529
import org.springframework.tests.sample.beans.TestBean;
26-
2730
import org.springframework.aop.support.AopUtils;
2831
import org.springframework.beans.factory.annotation.Autowired;
2932
import org.springframework.beans.factory.annotation.Value;
@@ -34,6 +37,8 @@
3437
import org.springframework.context.annotation.Bean;
3538
import org.springframework.context.annotation.Configuration;
3639
import org.springframework.context.annotation.ImportResource;
40+
import org.springframework.core.env.MapPropertySource;
41+
import org.springframework.core.env.PropertySource;
3742

3843
/**
3944
* Integration tests for {@link ImportResource} support.
@@ -178,4 +183,22 @@ public void testImportDifferentResourceTypes() {
178183
reader=XmlBeanDefinitionReader.class)
179184
static class SubResourceConfig extends ImportNonXmlResourceConfig {
180185
}
186+
187+
@Test
188+
public void importWithPlaceHolder() throws Exception {
189+
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
190+
PropertySource<?> propertySource = new MapPropertySource("test",
191+
Collections.<String, Object> singletonMap("test", "springframework"));
192+
ctx.getEnvironment().getPropertySources().addFirst(propertySource);
193+
ctx.register(ImportXmlConfig.class);
194+
ctx.refresh();
195+
assertTrue("did not contain xml-declared bean", ctx.containsBean("xmlDeclaredBean"));
196+
}
197+
198+
@Configuration
199+
@ImportResource("classpath:org/${test}/context/annotation/configuration/ImportXmlConfig-context.xml")
200+
static class ImportWithPlaceHolder {
201+
}
202+
203+
181204
}

0 commit comments

Comments
 (0)