This is an automated email from the ASF dual-hosted git repository. anatole pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-tamaya-extensions.git
The following commit(s) were added to refs/heads/master by this push: new 27ba526 TAMAYA-384 Improved Spring integration. 27ba526 is described below commit 27ba526027a110acc9c3e75c4bdef4dfe54203c3 Author: Anatole Tresch <atsti...@gmail.com> AuthorDate: Thu Mar 14 23:52:36 2019 +0100 TAMAYA-384 Improved Spring integration. --- modules/spring/pom.xml | 7 ++ .../integration/spring/EnableTamayaConfig.java | 48 ++++++++++ .../spring/SpringConfigInjectionPostProcessor.java | 17 +++- .../spring/TamayaDefaultConfigSupplier.java | 33 +++++++ .../integration/spring/TamayaSpringConfig.java | 61 ------------- .../spring/TamayaSpringConfigurator.java | 100 +++++++++++++++++++++ .../spring/TamayaSpringPropertySource.java | 15 +++- .../spring/src/main/resources/spring-config.xml | 2 +- .../integration/spring/ConfiguredSpringBean.java | 15 ++++ .../tamaya/integration/spring/MyApplication.java | 2 +- ...igTest.java => SpringAnnotationConfigTest.java} | 10 ++- ...onfigTest.java => SpringConfigNoInjection.java} | 19 ++-- .../integration/spring/SpringConfigTest2.java | 42 --------- .../spring/SpringTestPropertySource.java} | 18 ++-- ...ingConfigTest.java => SpringXmlConfigTest.java} | 7 +- ...figTest.java => TamayaConfigExtendingTest.java} | 21 ++--- ...nfigTest.java => TamayaConfigOverrideTest.java} | 21 ++--- .../META-INF/javaconfiguration.properties | 3 +- .../src/test/resources/spring-config-scanOnly.xml | 35 -------- .../spring/src/test/resources/spring-config.xml | 4 +- modules/spring/src/test/resources/test.properties | 1 + 21 files changed, 290 insertions(+), 191 deletions(-) diff --git a/modules/spring/pom.xml b/modules/spring/pom.xml index 0810dbd..3a7aecf 100644 --- a/modules/spring/pom.xml +++ b/modules/spring/pom.xml @@ -116,6 +116,13 @@ under the License. <version>${spring.boot.version}</version> <scope>test</scope> </dependency> + + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-test</artifactId> + <version>${spring.boot.version}</version> + <scope>test</scope> + </dependency> </dependencies> </project> diff --git a/modules/spring/src/main/java/org/apache/tamaya/integration/spring/EnableTamayaConfig.java b/modules/spring/src/main/java/org/apache/tamaya/integration/spring/EnableTamayaConfig.java new file mode 100644 index 0000000..f380574 --- /dev/null +++ b/modules/spring/src/main/java/org/apache/tamaya/integration/spring/EnableTamayaConfig.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.apache.tamaya.integration.spring; + +import org.springframework.context.annotation.Import; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Use this annotation to enable Tamaya as a configuration backend for Spring. + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +@Import(TamayaSpringConfigurator.class) +public @interface EnableTamayaConfig { + + /** + * If set to true, Tamaya will only extend the current Spring configuration, instead of overriding it (default). + * @return true to extend only the default Spring configuration. + */ + boolean extendOnly() default false; + + /** + * If set to true, Tamaya configuration injection will be disabled. Spring injection mechanisms are never + * touched by this feature. Default is false. + * @return true to switch off Tamaya injection in your Spring application. + */ + boolean disableTamayaInjection() default false; +} diff --git a/modules/spring/src/main/java/org/apache/tamaya/integration/spring/SpringConfigInjectionPostProcessor.java b/modules/spring/src/main/java/org/apache/tamaya/integration/spring/SpringConfigInjectionPostProcessor.java index 279351e..19fffe0 100644 --- a/modules/spring/src/main/java/org/apache/tamaya/integration/spring/SpringConfigInjectionPostProcessor.java +++ b/modules/spring/src/main/java/org/apache/tamaya/integration/spring/SpringConfigInjectionPostProcessor.java @@ -18,21 +18,32 @@ */ package org.apache.tamaya.integration.spring; +import org.apache.tamaya.Configuration; import org.apache.tamaya.inject.ConfigurationInjector; import org.springframework.beans.BeansException; +import org.springframework.beans.factory.ObjectFactory; import org.springframework.beans.factory.config.BeanPostProcessor; -import org.springframework.stereotype.Component; /** * PostProcessor that performs injection of configured values using Tamaya {@link ConfigurationInjector}. */ -@Component public class SpringConfigInjectionPostProcessor implements BeanPostProcessor{ + private ObjectFactory<Configuration> configSupplier; + + public SpringConfigInjectionPostProcessor(ObjectFactory<Configuration> configSupplier){ + try{ + Configuration config = configSupplier.getObject(); + this.configSupplier = configSupplier; + }catch(Exception e){ + this.configSupplier = Configuration::current; + } + } + @Override public Object postProcessBeforeInitialization(Object o, String s) throws BeansException { - ConfigurationInjector.getInstance().configure(o); + ConfigurationInjector.getInstance().configure(o, this.configSupplier.getObject()); return o; } diff --git a/modules/spring/src/main/java/org/apache/tamaya/integration/spring/TamayaDefaultConfigSupplier.java b/modules/spring/src/main/java/org/apache/tamaya/integration/spring/TamayaDefaultConfigSupplier.java new file mode 100644 index 0000000..7b01ac8 --- /dev/null +++ b/modules/spring/src/main/java/org/apache/tamaya/integration/spring/TamayaDefaultConfigSupplier.java @@ -0,0 +1,33 @@ +///* +// * Licensed to the Apache Software Foundation (ASF) under one +// * or more contributor license agreements. See the NOTICE file +// * distributed with this work for additional information +// * regarding copyright ownership. The ASF licenses this file +// * to you 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.apache.tamaya.integration.spring; +// +//import org.apache.tamaya.Configuration; +//import org.apache.tamaya.functions.Supplier; +// +///** +// * Default Supplier delegating to {@link Configuration#current()}. +// */ +//public class TamayaDefaultConfigSupplier implements Supplier<Configuration> { +// +// @Override +// public Configuration get() { +// return Configuration.current(); +// } +//} diff --git a/modules/spring/src/main/java/org/apache/tamaya/integration/spring/TamayaSpringConfig.java b/modules/spring/src/main/java/org/apache/tamaya/integration/spring/TamayaSpringConfig.java deleted file mode 100644 index 7c9966b..0000000 --- a/modules/spring/src/main/java/org/apache/tamaya/integration/spring/TamayaSpringConfig.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.apache.tamaya.integration.spring; - - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; -import org.springframework.core.env.ConfigurableEnvironment; -import org.springframework.core.env.MutablePropertySources; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; - -/** - * Spring Configuration Bean adding {@link TamayaSpringPropertySource} to the current - * {@link org.springframework.core.env.Environment}. - */ -@Component -@Configuration -public class TamayaSpringConfig { - - @Autowired - private ConfigurableEnvironment env; - - @PostConstruct - public void init() { - env.getPropertySources().addFirst(new TamayaSpringPropertySource()); - } - - @Bean - public static PropertySourcesPlaceholderConfigurer placeHolderConfigurer() { - PropertySourcesPlaceholderConfigurer cfgBean = new PropertySourcesPlaceholderConfigurer(); - MutablePropertySources sources = new MutablePropertySources(); - sources.addFirst(new TamayaSpringPropertySource()); - cfgBean.setPropertySources(sources); - return cfgBean; - } - - @Bean - public static SpringConfigInjectionPostProcessor tamayaConfigPostProcessor(){ - return new SpringConfigInjectionPostProcessor(); - } - } \ No newline at end of file diff --git a/modules/spring/src/main/java/org/apache/tamaya/integration/spring/TamayaSpringConfigurator.java b/modules/spring/src/main/java/org/apache/tamaya/integration/spring/TamayaSpringConfigurator.java new file mode 100644 index 0000000..71d4c66 --- /dev/null +++ b/modules/spring/src/main/java/org/apache/tamaya/integration/spring/TamayaSpringConfigurator.java @@ -0,0 +1,100 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.apache.tamaya.integration.spring; + +import org.springframework.beans.factory.ObjectFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ImportSelector; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.core.annotation.AnnotationAttributes; +import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.core.type.AnnotationMetadata; + +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Logger; + +/** + * Spring Configurator Bean adding {@link TamayaSpringPropertySource} to the current + * {@link org.springframework.core.env.Environment} and optionally activate Tamaya injection + * of beans. + */ +public class TamayaSpringConfigurator implements ImportSelector { + + private Logger LOG = Logger.getLogger(TamayaSpringConfigurator.class.getName()); + + @Override + public String[] selectImports(AnnotationMetadata importingClassMetadata) { + AnnotationAttributes attributes = + AnnotationAttributes.fromMap( + importingClassMetadata.getAnnotationAttributes(EnableTamayaConfig.class.getName(), false)); + boolean extendOnly = attributes.getBoolean("extendOnly"); + boolean disableTamayaInjection = attributes.getBoolean("disableTamayaInjection"); + List<String> configClasses = new ArrayList<>(); + if (extendOnly) { + configClasses.add(ExtendingOnlyConfig.class.getName()); + }else { + configClasses.add(DefaultConfig.class.getName()); + } + if(!disableTamayaInjection){ + configClasses.add(TamayaInjectionConfig.class.getName()); + } + return configClasses.toArray(new String[configClasses.size()]); + } + + public static class ExtendingOnlyConfig { + + @Bean + public PropertySourcesPlaceholderConfigurer placeHolderConfigurer(ConfigurableEnvironment env, + ObjectFactory<org.apache.tamaya.Configuration> configSupplier) { + TamayaSpringPropertySource tamayaSpringPropertySource = new TamayaSpringPropertySource(configSupplier); + env.getPropertySources().addLast(tamayaSpringPropertySource); + + PropertySourcesPlaceholderConfigurer cfgBean = new PropertySourcesPlaceholderConfigurer(); + cfgBean.setEnvironment(env); + return cfgBean; + } + + } + + public static class DefaultConfig { + + @Bean + public PropertySourcesPlaceholderConfigurer placeHolderConfigurer(ConfigurableEnvironment env, + ObjectFactory<org.apache.tamaya.Configuration> configSupplier) { + + TamayaSpringPropertySource tamayaSpringPropertySource = new TamayaSpringPropertySource(configSupplier); + env.getPropertySources().addFirst(tamayaSpringPropertySource); + PropertySourcesPlaceholderConfigurer cfgBean = new PropertySourcesPlaceholderConfigurer(); + cfgBean.setEnvironment(env); + return cfgBean; + } + + } + + public static class TamayaInjectionConfig { + + @Bean + public SpringConfigInjectionPostProcessor tamayaConfigPostProcessor(ObjectFactory<org.apache.tamaya.Configuration> configSupplier) { + return new SpringConfigInjectionPostProcessor(configSupplier); + } + } + + + } \ No newline at end of file diff --git a/modules/spring/src/main/java/org/apache/tamaya/integration/spring/TamayaSpringPropertySource.java b/modules/spring/src/main/java/org/apache/tamaya/integration/spring/TamayaSpringPropertySource.java index 03b61c2..fb010a4 100644 --- a/modules/spring/src/main/java/org/apache/tamaya/integration/spring/TamayaSpringPropertySource.java +++ b/modules/spring/src/main/java/org/apache/tamaya/integration/spring/TamayaSpringPropertySource.java @@ -18,8 +18,8 @@ */ package org.apache.tamaya.integration.spring; - import org.apache.tamaya.Configuration; +import org.springframework.beans.factory.ObjectFactory; import org.springframework.core.env.PropertySource; /** @@ -27,13 +27,22 @@ import org.springframework.core.env.PropertySource; */ public class TamayaSpringPropertySource extends PropertySource<String> { - public TamayaSpringPropertySource() { + private ObjectFactory<Configuration> configSupplier; + + public TamayaSpringPropertySource(ObjectFactory<Configuration> configSupplier) { super("ApacheTamayaConfig"); + try{ + Configuration config = configSupplier.getObject(); + this.configSupplier = configSupplier; + }catch(Exception e){ + this.configSupplier = Configuration::current; + } + } @Override public String getProperty(String name) { - return Configuration.current().get(name); + return configSupplier.getObject().getOrDefault(name, null); } } \ No newline at end of file diff --git a/modules/spring/src/main/resources/spring-config.xml b/modules/spring/src/main/resources/spring-config.xml index c1d6eda..00f02f2 100644 --- a/modules/spring/src/main/resources/spring-config.xml +++ b/modules/spring/src/main/resources/spring-config.xml @@ -27,6 +27,6 @@ under the License. <!-- Our dependencies --> <bean id="tamayaInjectionProcessor" name="tamayaInjectionProcessor" class="org.apache.tamaya.integration.spring.SpringConfigInjectionPostProcessor"/> - <bean id="tamayaConfigProvider" name="tamayaConfigProvider" class="org.apache.tamaya.integration.spring.TamayaSpringConfig"/> + <bean id="tamayaConfigProvider" name="tamayaConfigProvider" class="org.apache.tamaya.integration.spring.TamayaSpringConfigurator"/> </beans> \ No newline at end of file diff --git a/modules/spring/src/test/java/org/apache/tamaya/integration/spring/ConfiguredSpringBean.java b/modules/spring/src/test/java/org/apache/tamaya/integration/spring/ConfiguredSpringBean.java index 6e8f830..9abab48 100644 --- a/modules/spring/src/test/java/org/apache/tamaya/integration/spring/ConfiguredSpringBean.java +++ b/modules/spring/src/test/java/org/apache/tamaya/integration/spring/ConfiguredSpringBean.java @@ -22,6 +22,7 @@ import org.apache.tamaya.inject.api.Config; import org.apache.tamaya.inject.api.ConfigSection; import org.apache.tamaya.inject.spi.AbsoluteKeyResolver; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; /** @@ -35,6 +36,12 @@ public class ConfiguredSpringBean { @Autowired private Environment env; + @Value("${myConfiguredValue}") + private String springInjected; + + @Value("${spring.application:foo}") + private String springApplication; + @Config(key="java.version") private String javaVersion; @@ -45,6 +52,10 @@ public class ConfiguredSpringBean { return javaVersion; } + public String getSpringApplication(){ + return springApplication; + } + public int getTestNumber(){ return testNumber; } @@ -53,6 +64,10 @@ public class ConfiguredSpringBean { return env; } + public String getSpringInjected() { + return springInjected; + } + public void setMessage(String message){ this.message = message; } diff --git a/modules/spring/src/test/java/org/apache/tamaya/integration/spring/MyApplication.java b/modules/spring/src/test/java/org/apache/tamaya/integration/spring/MyApplication.java index cc78815..d44ffa2 100644 --- a/modules/spring/src/test/java/org/apache/tamaya/integration/spring/MyApplication.java +++ b/modules/spring/src/test/java/org/apache/tamaya/integration/spring/MyApplication.java @@ -24,7 +24,7 @@ import org.springframework.context.ApplicationContext; import org.springframework.test.context.ContextConfiguration; @SpringBootApplication -@ContextConfiguration(classes=TamayaSpringConfig.class) +@EnableTamayaConfig public class MyApplication { public static void main (String[] args) { diff --git a/modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringConfigTest.java b/modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringAnnotationConfigTest.java similarity index 86% copy from modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringConfigTest.java copy to modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringAnnotationConfigTest.java index 98ac7c9..573b93c 100644 --- a/modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringConfigTest.java +++ b/modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringAnnotationConfigTest.java @@ -30,8 +30,9 @@ import static org.assertj.core.api.Assertions.assertThat; * Created by Anatole on 25.09.2015. */ @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration("classpath:spring-config.xml") -public class SpringConfigTest { +@ContextConfiguration(classes = {ConfiguredSpringBean.class, SpringAnnotationConfigTest.class}) +@EnableTamayaConfig +public class SpringAnnotationConfigTest { @Autowired private ConfiguredSpringBean configuredBean; @@ -53,6 +54,11 @@ public class SpringConfigTest { } @Test + public void assert_SpringInjection(){ + assertThat(configuredBean.getSpringInjected()).isEqualTo("value11"); + } + + @Test public void assert_Number_From_Environment(){ assertThat("value11").isEqualTo(configuredBean.getEnv().getProperty("myConfiguredValue")); } diff --git a/modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringConfigTest.java b/modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringConfigNoInjection.java similarity index 73% copy from modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringConfigTest.java copy to modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringConfigNoInjection.java index 98ac7c9..36fc5e3 100644 --- a/modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringConfigTest.java +++ b/modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringConfigNoInjection.java @@ -30,8 +30,9 @@ import static org.assertj.core.api.Assertions.assertThat; * Created by Anatole on 25.09.2015. */ @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration("classpath:spring-config.xml") -public class SpringConfigTest { +@ContextConfiguration(classes = {ConfiguredSpringBean.class, SpringConfigNoInjection.class}) +@EnableTamayaConfig(disableTamayaInjection = true) +public class SpringConfigNoInjection { @Autowired private ConfiguredSpringBean configuredBean; @@ -43,13 +44,19 @@ public class SpringConfigTest { @Test public void assert_JavaVersion_Injected(){ - assertThat(configuredBean.getJavaVersion()).isNotNull(); - assertThat(System.getProperty("java.version")).isEqualTo(configuredBean.getJavaVersion()); + assertThat(configuredBean.getJavaVersion()).isNull(); + assertThat(configuredBean.getJavaVersion()).isNull(); + assertThat(configuredBean.getTestNumber()).isEqualTo(0); } @Test - public void assert_Number_Injected(){ - assertThat(configuredBean.getTestNumber()).isEqualTo(23); + public void assert_Environment_Injected() { + assertThat(configuredBean.getEnv()).isNotNull(); + } + + @Test + public void assert_SpringInjection(){ + assertThat(configuredBean.getSpringInjected()).isEqualTo("value11"); } @Test diff --git a/modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringConfigTest2.java b/modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringConfigTest2.java deleted file mode 100644 index 8538596..0000000 --- a/modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringConfigTest2.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.apache.tamaya.integration.spring; - -import org.junit.Test; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Test using standard Spring setup. - */ -public class SpringConfigTest2 { - - @Test - public void assertDefaultSetup(){ - ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-config-scanOnly.xml"); - ConfiguredSpringBean configuredBean = context.getBean(ConfiguredSpringBean.class); - assertThat(configuredBean.getJavaVersion()).isNotNull(); - assertThat(configuredBean.getJavaVersion()).isEqualTo(System.getProperty("java.version")); - assertThat(configuredBean.getMessage()).isNotNull(); - assertThat(configuredBean.getMessage()).isEqualTo("value2"); - } - -} diff --git a/modules/spring/src/main/java/org/apache/tamaya/integration/spring/TamayaEnvironment.java b/modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringTestPropertySource.java similarity index 66% rename from modules/spring/src/main/java/org/apache/tamaya/integration/spring/TamayaEnvironment.java rename to modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringTestPropertySource.java index 7f1000e..9c67a27 100644 --- a/modules/spring/src/main/java/org/apache/tamaya/integration/spring/TamayaEnvironment.java +++ b/modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringTestPropertySource.java @@ -18,16 +18,16 @@ */ package org.apache.tamaya.integration.spring; -import org.springframework.core.env.MutablePropertySources; -import org.springframework.core.env.StandardEnvironment; +import org.springframework.core.env.PropertySource; -/** - * Tamaya specific environment for Spring. - */ -public class TamayaEnvironment extends StandardEnvironment{ +public class SpringTestPropertySource extends PropertySource<String> { + + public SpringTestPropertySource(){ + super("Test-ProipertySource"); + } - protected void customizePropertySources(MutablePropertySources propertySources) { - super.customizePropertySources(propertySources); - propertySources.addLast(new TamayaSpringPropertySource()); + @Override + public String getProperty(String s) { + return null; } } diff --git a/modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringConfigTest.java b/modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringXmlConfigTest.java similarity index 92% copy from modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringConfigTest.java copy to modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringXmlConfigTest.java index 98ac7c9..912ba0d 100644 --- a/modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringConfigTest.java +++ b/modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringXmlConfigTest.java @@ -31,7 +31,7 @@ import static org.assertj.core.api.Assertions.assertThat; */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:spring-config.xml") -public class SpringConfigTest { +public class SpringXmlConfigTest { @Autowired private ConfiguredSpringBean configuredBean; @@ -53,6 +53,11 @@ public class SpringConfigTest { } @Test + public void assert_SpringInjection(){ + assertThat(configuredBean.getSpringInjected()).isEqualTo("value11"); + } + + @Test public void assert_Number_From_Environment(){ assertThat("value11").isEqualTo(configuredBean.getEnv().getProperty("myConfiguredValue")); } diff --git a/modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringConfigTest.java b/modules/spring/src/test/java/org/apache/tamaya/integration/spring/TamayaConfigExtendingTest.java similarity index 70% copy from modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringConfigTest.java copy to modules/spring/src/test/java/org/apache/tamaya/integration/spring/TamayaConfigExtendingTest.java index 98ac7c9..b319233 100644 --- a/modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringConfigTest.java +++ b/modules/spring/src/test/java/org/apache/tamaya/integration/spring/TamayaConfigExtendingTest.java @@ -22,6 +22,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import static org.assertj.core.api.Assertions.assertThat; @@ -30,8 +31,10 @@ import static org.assertj.core.api.Assertions.assertThat; * Created by Anatole on 25.09.2015. */ @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration("classpath:spring-config.xml") -public class SpringConfigTest { +@ContextConfiguration(name="tamaya-last", classes = {ConfiguredSpringBean.class, TamayaConfigExtendingTest.class}) +@TestPropertySource(locations = "classpath:test.properties") +@EnableTamayaConfig(extendOnly = true) +public class TamayaConfigExtendingTest { @Autowired private ConfiguredSpringBean configuredBean; @@ -42,19 +45,13 @@ public class SpringConfigTest { } @Test - public void assert_JavaVersion_Injected(){ - assertThat(configuredBean.getJavaVersion()).isNotNull(); - assertThat(System.getProperty("java.version")).isEqualTo(configuredBean.getJavaVersion()); + public void assert_springApplication_Injected(){ + assertThat(configuredBean.getSpringApplication()).isEqualTo("test-app-name"); } @Test - public void assert_Number_Injected(){ - assertThat(configuredBean.getTestNumber()).isEqualTo(23); - } - - @Test - public void assert_Number_From_Environment(){ - assertThat("value11").isEqualTo(configuredBean.getEnv().getProperty("myConfiguredValue")); + public void assert_springApplication_Env(){ + assertThat(configuredBean.getEnv().getProperty("spring.application")).isEqualTo("test-app-name"); } } diff --git a/modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringConfigTest.java b/modules/spring/src/test/java/org/apache/tamaya/integration/spring/TamayaConfigOverrideTest.java similarity index 71% rename from modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringConfigTest.java rename to modules/spring/src/test/java/org/apache/tamaya/integration/spring/TamayaConfigOverrideTest.java index 98ac7c9..76f3db4 100644 --- a/modules/spring/src/test/java/org/apache/tamaya/integration/spring/SpringConfigTest.java +++ b/modules/spring/src/test/java/org/apache/tamaya/integration/spring/TamayaConfigOverrideTest.java @@ -22,6 +22,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import static org.assertj.core.api.Assertions.assertThat; @@ -30,8 +31,10 @@ import static org.assertj.core.api.Assertions.assertThat; * Created by Anatole on 25.09.2015. */ @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration("classpath:spring-config.xml") -public class SpringConfigTest { +@ContextConfiguration(name="tamaya-last", classes = {ConfiguredSpringBean.class, TamayaConfigExtendingTest.class}) +@EnableTamayaConfig(extendOnly = false) +@TestPropertySource(locations = "classpath:test.properties") +public class TamayaConfigOverrideTest { @Autowired private ConfiguredSpringBean configuredBean; @@ -42,19 +45,13 @@ public class SpringConfigTest { } @Test - public void assert_JavaVersion_Injected(){ - assertThat(configuredBean.getJavaVersion()).isNotNull(); - assertThat(System.getProperty("java.version")).isEqualTo(configuredBean.getJavaVersion()); + public void assert_springApplication_Injected(){ + assertThat(configuredBean.getSpringApplication()).isEqualTo("yeah"); } @Test - public void assert_Number_Injected(){ - assertThat(configuredBean.getTestNumber()).isEqualTo(23); - } - - @Test - public void assert_Number_From_Environment(){ - assertThat("value11").isEqualTo(configuredBean.getEnv().getProperty("myConfiguredValue")); + public void assert_springApplication_Env(){ + assertThat(configuredBean.getEnv().getProperty("spring.application")).isEqualTo("yeah"); } } diff --git a/modules/spring/src/test/resources/META-INF/javaconfiguration.properties b/modules/spring/src/test/resources/META-INF/javaconfiguration.properties index 3366128..20a01da 100644 --- a/modules/spring/src/test/resources/META-INF/javaconfiguration.properties +++ b/modules/spring/src/test/resources/META-INF/javaconfiguration.properties @@ -17,4 +17,5 @@ # under the License. # myConfiguredValue=value11 -propertyValue=value2 \ No newline at end of file +propertyValue=value2 +spring.application=yeah \ No newline at end of file diff --git a/modules/spring/src/test/resources/spring-config-scanOnly.xml b/modules/spring/src/test/resources/spring-config-scanOnly.xml deleted file mode 100644 index 6e98d80..0000000 --- a/modules/spring/src/test/resources/spring-config-scanOnly.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you 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 current 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. ---> - -<beans xmlns="http://www.springframework.org/schema/beans" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns:context="http://www.springframework.org/schema/context" - xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> - <context:annotation-config /> - <context:component-scan base-package="org.apache.tamaya.integration.spring"/> - - <!-- Our dependencies --> - <!--<bean id="tamayaInjectionProcessor" name="tamayaInjectionProcessor" class="org.apache.tamaya.integration.spring.SpringConfigInjectionPostProcessor"/>--> - <!--<bean id="tamayaConfigProvider" name="tamayaConfigProvider" class="org.apache.tamaya.integration.spring.TamayaSpringConfig"/>--> - <bean id="configuredBean" name="configuredBean" class="org.apache.tamaya.integration.spring.ConfiguredSpringBean"> - <property name="message" value="${propertyValue}"/> - </bean> - -</beans> \ No newline at end of file diff --git a/modules/spring/src/test/resources/spring-config.xml b/modules/spring/src/test/resources/spring-config.xml index fc3f9d8..3982b4d 100644 --- a/modules/spring/src/test/resources/spring-config.xml +++ b/modules/spring/src/test/resources/spring-config.xml @@ -24,8 +24,8 @@ under the License. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- Our dependencies --> - <bean id="tamayaInjectionProcessor" name="tamayaInjectionProcessor" class="org.apache.tamaya.integration.spring.SpringConfigInjectionPostProcessor"/> - <bean id="tamayaConfigProvider" name="tamayaConfigProvider" class="org.apache.tamaya.integration.spring.TamayaSpringConfig"/> + <bean id="tamayaConfigInjector" name="tamayaConfigInjetor" class="org.apache.tamaya.integration.spring.SpringConfigInjectionPostProcessor"/> + <bean id="tamayaConfigProvider" name="tamayaConfigProvider" class="org.apache.tamaya.integration.spring.TamayaSpringConfigurator.DefaultConfig"/> <bean id="configuredBean" name="configuredBean" class="org.apache.tamaya.integration.spring.ConfiguredSpringBean"/> </beans> \ No newline at end of file diff --git a/modules/spring/src/test/resources/test.properties b/modules/spring/src/test/resources/test.properties new file mode 100644 index 0000000..f0e9950 --- /dev/null +++ b/modules/spring/src/test/resources/test.properties @@ -0,0 +1 @@ +spring.application=test-app-name \ No newline at end of file