Home / Class/ PropertyPlaceholderAutoConfigurationTests Class — spring-boot Architecture

PropertyPlaceholderAutoConfigurationTests Class — spring-boot Architecture

Architecture documentation for the PropertyPlaceholderAutoConfigurationTests class in PropertyPlaceholderAutoConfigurationTests.java from the spring-boot codebase.

Entity Profile

Relationship Graph

Source Code

core/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/context/PropertyPlaceholderAutoConfigurationTests.java lines 42–135

class PropertyPlaceholderAutoConfigurationTests {

	private final ApplicationContextRunner contextRunner = new ApplicationContextRunner();

	@Test
	void whenTheAutoConfigurationIsNotUsedThenBeanDefinitionPlaceholdersAreNotResolved() {
		this.contextRunner.withPropertyValues("fruit:banana")
			.withInitializer(this::definePlaceholderBean)
			.run((context) -> assertThat(context.getBean(PlaceholderBean.class).fruit).isEqualTo("${fruit:apple}"));
	}

	@Test
	void whenTheAutoConfigurationIsUsedThenBeanDefinitionPlaceholdersAreResolved() {
		this.contextRunner.withPropertyValues("fruit:banana")
			.withInitializer(this::definePlaceholderBean)
			.withConfiguration(AutoConfigurations.of(PropertyPlaceholderAutoConfiguration.class))
			.run((context) -> assertThat(context.getBean(PlaceholderBean.class).fruit).isEqualTo("banana"));
	}

	@Test
	void whenTheAutoConfigurationIsNotUsedThenValuePlaceholdersAreResolved() {
		this.contextRunner.withPropertyValues("fruit:banana")
			.withUserConfiguration(PlaceholderConfig.class)
			.run((context) -> assertThat(context.getBean(PlaceholderConfig.class).fruit).isEqualTo("banana"));
	}

	@Test
	void whenTheAutoConfigurationIsUsedThenValuePlaceholdersAreResolved() {
		this.contextRunner.withPropertyValues("fruit:banana")
			.withConfiguration(AutoConfigurations.of(PropertyPlaceholderAutoConfiguration.class))
			.withUserConfiguration(PlaceholderConfig.class)
			.run((context) -> assertThat(context.getBean(PlaceholderConfig.class).fruit).isEqualTo("banana"));
	}

	@Test
	void whenThereIsAUserDefinedPropertySourcesPlaceholderConfigurerThenItIsUsedForBeanDefinitionPlaceholderResolution() {
		this.contextRunner.withPropertyValues("fruit:banana")
			.withInitializer(this::definePlaceholderBean)
			.withConfiguration(AutoConfigurations.of(PropertyPlaceholderAutoConfiguration.class))
			.withUserConfiguration(PlaceholdersOverride.class)
			.run((context) -> assertThat(context.getBean(PlaceholderBean.class).fruit).isEqualTo("orange"));
	}

	@Test
	void whenThereIsAUserDefinedPropertySourcesPlaceholderConfigurerThenItIsUsedForValuePlaceholderResolution() {
		this.contextRunner.withPropertyValues("fruit:banana")
			.withConfiguration(AutoConfigurations.of(PropertyPlaceholderAutoConfiguration.class))
			.withUserConfiguration(PlaceholderConfig.class, PlaceholdersOverride.class)
			.run((context) -> assertThat(context.getBean(PlaceholderConfig.class).fruit).isEqualTo("orange"));
	}

	private void definePlaceholderBean(ConfigurableApplicationContext context) {
		((BeanDefinitionRegistry) context.getBeanFactory()).registerBeanDefinition("placeholderBean",
				BeanDefinitionBuilder.rootBeanDefinition(PlaceholderBean.class)
					.addConstructorArgValue("${fruit:apple}")
					.getBeanDefinition());
	}

	@Configuration(proxyBeanMethods = false)
	static class PlaceholderConfig {

		@Value("${fruit:apple}")
		@SuppressWarnings("NullAway.Init")
		private String fruit;

	}

	static class PlaceholderBean {

		private final String fruit;

		PlaceholderBean(String fruit) {
			this.fruit = fruit;
		}

	}

	@Configuration(proxyBeanMethods = false)
	static class PlaceholdersOverride {

		@Bean
		static PropertySourcesPlaceholderConfigurer morePlaceholders() {
			PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
			Properties properties = StringUtils.splitArrayElementsIntoProperties(new String[] { "fruit=orange" }, "=");
			assertThat(properties).isNotNull();
			configurer.setProperties(properties);
			configurer.setLocalOverride(true);
			configurer.setOrder(0);
			return configurer;
		}

	}

}

Domain

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free