diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/context/MessageSourceAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/context/MessageSourceAutoConfiguration.java index ec87833c6f..9c1b4d8ade 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/context/MessageSourceAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/context/MessageSourceAutoConfiguration.java @@ -33,6 +33,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ConditionContext; import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; +import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ResourceBundleMessageSource; import org.springframework.core.Ordered; import org.springframework.core.io.Resource; @@ -49,7 +50,7 @@ import org.springframework.util.StringUtils; * @author EddĂș MelĂ©ndez */ @Configuration -@ConditionalOnMissingBean(value = MessageSource.class, search = SearchStrategy.CURRENT) +@ConditionalOnMissingBean(name = AbstractApplicationContext.MESSAGE_SOURCE_BEAN_NAME, search = SearchStrategy.CURRENT) @AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE) @Conditional(ResourceBundleCondition.class) @EnableConfigurationProperties diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/context/MessageSourceAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/context/MessageSourceAutoConfigurationTests.java index 72a0c9a560..93a088e6bc 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/context/MessageSourceAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/context/MessageSourceAutoConfigurationTests.java @@ -198,6 +198,48 @@ public class MessageSourceAutoConfigurationTests { .isEqualTo("bar"))); } + @Test + public void messageSourceDeclaredWithNonStandardNameDoesNotBreakAutoConfig() { + this.contextRunner.withPropertyValues("spring.messages.basename:test/messages") + .withUserConfiguration(ConfigWithNonStandardMessageSourceBeanName.class) + .run((context) -> { + assertThat(context.getMessage("foo", null, Locale.US)) + .isEqualTo("bar"); + }); + } + + private static class CodeReturningMessageSource implements MessageSource { + + @Override + public String getMessage(String code, Object[] args, String defaultMessage, + Locale locale) { + return code; + } + + @Override + public String getMessage(String code, Object[] args, Locale locale) + throws NoSuchMessageException { + return code; + } + + @Override + public String getMessage(MessageSourceResolvable resolvable, Locale locale) + throws NoSuchMessageException { + return resolvable.getCodes()[0]; + } + + } + + @Configuration + protected static class ConfigWithNonStandardMessageSourceBeanName { + + @Bean + public MessageSource codeReturningMessageSource() { + return new CodeReturningMessageSource(); + } + + } + @Configuration @PropertySource("classpath:/switch-messages.properties") protected static class Config { @@ -209,27 +251,7 @@ public class MessageSourceAutoConfigurationTests { @Bean public MessageSource messageSource() { - return new MessageSource() { - - @Override - public String getMessage(String code, Object[] args, - String defaultMessage, Locale locale) { - return code; - } - - @Override - public String getMessage(String code, Object[] args, Locale locale) - throws NoSuchMessageException { - return code; - } - - @Override - public String getMessage(MessageSourceResolvable resolvable, - Locale locale) throws NoSuchMessageException { - return resolvable.getCodes()[0]; - } - - }; + return new CodeReturningMessageSource(); } }