Весна: Автопроводка bean-компонента типа java.util.Locale, похоже, не работает - PullRequest
2 голосов
/ 20 сентября 2011

Я пишу очень простое руководство по Spring (3.0.x) для моих коллег-разработчиков и столкнулось со странным поведением: bean-компонент типа java.util.Locale не подключается автоматически к другому bean-компоненту и не появляется сообщение об ошибке.Но, тем не менее, другой компонент создается нормально, просто поле равно нулю.

К деталям:

  • Конфигурация основана исключительно на XML.
  • Ниже приведены определения bean-компонентов:

    <bean id="spanishLocale" class="java.util.Locale">
        <constructor-arg value="es"/>
        <constructor-arg value="ES"/>
    </bean>
    
    <bean id="dateTimeBeanSetter" class="com.bsl.training.theclock.SimpleDateTimeBean3" autowire="byType"/>
    
  • Не использовалась автоматическая настройка.

  • Класс:

package com.bsl.training.theclock;

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;


public class SimpleDateTimeBean3 {
    private Locale locale;

    public SimpleDateTimeBean3() {

    }

    public void setLocale(final Locale loc) {
        locale = loc;
    }

    public Locale getLocale() {
        return locale;
    }

    public String getDateTime() {
        DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, locale);
        return df.format(new Date());
    }   
}
  • Если я добавлю поле в класс SimpleDateTimeBean3, тип которого является одним из моих собственных классов, и такой бин существует, все работаетв совершенстве.
  • Ошибки не выводятся, оба бина (spanishLocale, dateTimeBeanSetter) создаются и доступны из ApplicationContext, но вызов getDateTime () для бина 'dateTimeBeanSetter' дает NPE.

Anyидеи?

Заранее спасибо.

1 Ответ

1 голос
/ 20 сентября 2011

Два ключевых фрагмента документации:

Из справочного руководства, раздел 3.4.5.1:

Вы не можете автоматически связывать так называемые простые свойства, такие как примитивы, строки и классы (и массивы таких простых свойств). Это ограничение является второстепенным

И из org.springframework.beans.BeanUtils # isSimpleProperty () javadoc:

Проверьте, представляет ли данный тип «простое» свойство: примитив, String или другую CharSequence, Number, Date, URI, URL, Locale, Class или соответствующий массив. Проверьте, если данный тип представляет «простое» свойство: примитив, String или другую CharSequence, Number, Date, URI, URL, Locale , Class или соответствующий массив.

Итак, работая как задумано.

...