2014-09-21 1 views
2

У меня есть рабочий Spring MVC Project и вы хотите перенести конфигурацию контекста приложения из xml в Java-Config. Все работает отлично, за исключением messageSource Bean.Spring messageSource работает только как xml (не как Spring-Java-Config)


После работает отлично:
Этот класс конфигурации импортируется другим классом конфигурации:

package gmm; 

import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.ImportResource; 

@Configuration 
@ImportResource({"classpath:applicationContext.xml"}) 
public class I18nConfiguration { 

} 

Реферировано applicationContext.xml файл:

<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-3.2.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.2.xsd 
"> 

    <bean id="messageSource" 
     class="org.springframework.context.support.ResourceBundleMessageSource"> 
     <property name="basename"> 
      <value>messages</value> 
     </property> 
    </bean> 

</beans> 

После делает не работает:
Перемещенной фасоли в Java конфигурацию:

package gmm; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.support.ResourceBundleMessageSource; 

@Configuration 
public class I18nConfiguration { 

    @Bean 
    public ResourceBundleMessageSource messageSource() { 
     ResourceBundleMessageSource source = new ResourceBundleMessageSource(); 
     source.setBasename("messages"); 
     return source; 
    } 
} 

Когда я использую этот Java конфигурацию, я получаю только обычный ???key.for.message??? материал. Отладочный вывод не говорит мне что-то необычное.
Я не вижу здесь, что здесь не так. Есть ли очевидная ошибка в моем коде? Скажите, пожалуйста, даже если вы сейчас не решили, потому что я чувствую себя как-то немым сейчас! Это должно быть просто супер, не так ли?


Edit: Файлы сообщений в SRC/основные/ресурсы и названы как messages_en.properties.
Edit2: Полный исходный код проекта можно найти здесь: https://github.com/Katharsas/GMM/tree/PerfRevamp

+0

Вы забыли '@ Bean'. – axtavt

+0

Извините, я удалил эту строку по какой-то причине, когда я скопировал код на вопрос. Прочитал его. Я также пробовал явное имя бина, что не помогло. – Katharsas

ответ

2

Хорошо, я решил это!

TLDR: У меня была Java-Config, определяющая messageSource Bean в другом файле (который я не знал). Этот конфиг переопределил мой Java-Config, но не смог переопределить конфигурацию xml. Итак, xml работал, но Java-Config этого не делал.

Как я нашел эту ошибку:

Я просто скопировал журнал запуска сервлета обеих версий в онлайн-инструмент текст Diff (после замены метки времени с фиктивными текстом)

Рабочий журнал Код:

INFORMATION: Loading XML bean definitions from class path resource [applicationContext.xml] 
     19 Sep 25, 2014 time org.springframework.beans.factory.support.DefaultListableBeanFactory registerBeanDefinition 
     20 INFORMATION: Overriding bean definition for bean 'messageSource': replacing [Generic bean: class [com.technologicaloddity.capturejsp.util.TechOddMessageSource]; scope=singleton; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in file [C:\Users\Jan\Repositories\GMM\target\classes\com\technologicaloddity\capturejsp\util\TechOddMessageSource.class 
]] with [Generic bean: class [org.springframework.context.support.ResourceBundleMessageSource]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in class path resource [applicationContext.xml]] 

Не работает код той же линии:

Sep 25, 2014 time org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader isOverriddenByExistingDefinition 
INFORMATION: Skipping bean definition for [BeanMethod:name=messageSource,declaringClass=gmm.I18nConfiguration]: a definition for bean 'messageSource' already exists. This top-level bean definition is considered as an override. 
Смежные вопросы