diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/support/AbstractApplicationContextFactory.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/support/AbstractApplicationContextFactory.java index a424bd16e..5c977b743 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/support/AbstractApplicationContextFactory.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/support/AbstractApplicationContextFactory.java @@ -35,6 +35,7 @@ import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import org.springframework.util.Assert; /** @@ -67,6 +68,7 @@ public abstract class AbstractApplicationContextFactory implements ApplicationCo this.resource = resource; beanFactoryPostProcessorClasses = new ArrayList>(); beanFactoryPostProcessorClasses.add(PropertyPlaceholderConfigurer.class); + beanFactoryPostProcessorClasses.add(PropertySourcesPlaceholderConfigurer.class); beanFactoryPostProcessorClasses.add(CustomEditorConfigurer.class); beanPostProcessorExcludeClasses = new ArrayList>(); /* @@ -200,14 +202,14 @@ public abstract class AbstractApplicationContextFactory implements ApplicationCo beanFactory.copyConfigurationFrom(parent); List beanPostProcessors = beanFactory instanceof AbstractBeanFactory ? ((AbstractBeanFactory) beanFactory) .getBeanPostProcessors() : new ArrayList(); - for (BeanPostProcessor beanPostProcessor : new ArrayList(beanPostProcessors)) { - for (Class cls : beanPostProcessorExcludeClasses) { - if (cls.isAssignableFrom(beanPostProcessor.getClass())) { - logger.debug("Removing bean post processor: " + beanPostProcessor + " of type " + cls); - beanPostProcessors.remove(beanPostProcessor); + for (BeanPostProcessor beanPostProcessor : new ArrayList(beanPostProcessors)) { + for (Class cls : beanPostProcessorExcludeClasses) { + if (cls.isAssignableFrom(beanPostProcessor.getClass())) { + logger.debug("Removing bean post processor: " + beanPostProcessor + " of type " + cls); + beanPostProcessors.remove(beanPostProcessor); + } + } } - } - } } } @@ -223,10 +225,12 @@ public abstract class AbstractApplicationContextFactory implements ApplicationCo @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; + } return toString().equals(obj.toString()); } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/support/GenericApplicationContextFactory.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/support/GenericApplicationContextFactory.java index 563007bcc..34e92ce86 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/support/GenericApplicationContextFactory.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/support/GenericApplicationContextFactory.java @@ -58,10 +58,10 @@ public class GenericApplicationContextFactory extends AbstractApplicationContext return new ResourceXmlApplicationContext(parent, (Resource) resource); } if (resource instanceof Class) { - return new ResourceAnnotationApplicationContext(parent, (Class) resource); + return new ResourceAnnotationApplicationContext(parent, resource); } if (resource instanceof String) { - return new ResourceAnnotationApplicationContext(parent, (String) resource); + return new ResourceAnnotationApplicationContext(parent, resource); } throw new IllegalArgumentException("No application context could be created for resource type: " + resource.getClass()); @@ -99,7 +99,7 @@ public class GenericApplicationContextFactory extends AbstractApplicationContext GenericApplicationContextFactory.this.prepareBeanFactory(parentBeanFactory, beanFactory); for (Class cls : getBeanFactoryPostProcessorClasses()) { for (String name : parent.getBeanNamesForType(cls)) { - beanFactory.registerSingleton(name, ((BeanFactoryPostProcessor) parent.getBean(name))); + beanFactory.registerSingleton(name, (parent.getBean(name))); } } } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/support/GenericApplicationContextFactoryTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/support/GenericApplicationContextFactoryTests.java index fbe953213..922c575a6 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/support/GenericApplicationContextFactoryTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/support/GenericApplicationContextFactoryTests.java @@ -58,8 +58,8 @@ public class GenericApplicationContextFactoryTests { getClass(), "parent-context.xml"))); ConfigurableApplicationContext context = factory.createApplicationContext(); assertEquals("test-job", context.getBeanNamesForType(Job.class)[0]); - assertEquals("bar", ((Job) context.getBean("test-job", Job.class)).getName()); - assertEquals(4, ((Foo) context.getBean("foo", Foo.class)).values[1], 0.01); + assertEquals("bar", context.getBean("test-job", Job.class).getName()); + assertEquals(4, context.getBean("foo", Foo.class).values[1], 0.01); } @Test @@ -70,7 +70,20 @@ public class GenericApplicationContextFactoryTests { getClass(), "parent-context.xml"))); ConfigurableApplicationContext context = factory.createApplicationContext(); assertEquals("test-job", context.getBeanNamesForType(Job.class)[0]); - assertEquals("spam", ((Job) context.getBean("test-job", Job.class)).getName()); + assertEquals("spam", context.getBean("test-job", Job.class).getName()); + } + + @Test + public void testBeanFactoryProfileRespected() { + GenericApplicationContextFactory factory = new GenericApplicationContextFactory( + new ClassPathResource(ClassUtils.addResourcePathToPackagePath(getClass(), "profiles.xml"))); + ClassPathXmlApplicationContext parentContext = new ClassPathXmlApplicationContext(ClassUtils.addResourcePathToPackagePath( + getClass(), "parent-context.xml")); + parentContext.getEnvironment().setActiveProfiles("preferred"); + factory.setApplicationContext(parentContext); + ConfigurableApplicationContext context = factory.createApplicationContext(); + assertEquals("test-job", context.getBeanNamesForType(Job.class)[0]); + assertEquals("spam", context.getBean("test-job", Job.class).getName()); } @Test @@ -84,8 +97,8 @@ public class GenericApplicationContextFactoryTests { factory.setBeanFactoryPostProcessorClasses(classes); ConfigurableApplicationContext context = factory.createApplicationContext(); assertEquals("test-job", context.getBeanNamesForType(Job.class)[0]); - assertEquals("${foo}", ((Job) context.getBean("test-job", Job.class)).getName()); - assertEquals(4, ((Foo) context.getBean("foo", Foo.class)).values[1], 0.01); + assertEquals("${foo}", context.getBean("test-job", Job.class).getName()); + assertEquals(4, context.getBean("foo", Foo.class).values[1], 0.01); } @Test @@ -97,10 +110,10 @@ public class GenericApplicationContextFactoryTests { factory.setCopyConfiguration(false); ConfigurableApplicationContext context = factory.createApplicationContext(); assertEquals("test-job", context.getBeanNamesForType(Job.class)[0]); - assertEquals("bar", ((Job) context.getBean("test-job", Job.class)).getName()); + assertEquals("bar", context.getBean("test-job", Job.class).getName()); // The CustomEditorConfigurer is a BeanFactoryPostProcessor so the // editor gets copied anyway! - assertEquals(4, ((Foo) context.getBean("foo", Foo.class)).values[1], 0.01); + assertEquals(4, context.getBean("foo", Foo.class).values[1], 0.01); } @Test diff --git a/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/support/profiles.xml b/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/support/profiles.xml new file mode 100644 index 000000000..aae234868 --- /dev/null +++ b/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/support/profiles.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + spam + + + + + + + + + + + + + + + + foo + + + + +