Spring 3 @Autowired бросает NPE в форматтер - PullRequest
0 голосов
/ 04 июля 2011

Я написал свой собственный модуль форматирования и попытался автоматически подключить к нему службу, но получаю NullPointerException.

Форматер:

@Component
public class DepartmentFormatter implements Formatter<Department> {

    @Autowired
    private DepartmentService departmentService;

    @Override
    public String print(Department department, Locale locale) {
        return department.getName();
    }

    @Override
    public Department parse(String string, Locale locale) throws ParseException {
        return departmentService.getByName(string); // NPE thrown here
    }
}

Служба:

@Service
@Transactional
public class DepartmentServiceImpl implements DepartmentService {

    @Autowired
    private DepartmentDAO departmentDAO;

    /* ... */
}

В моем файле spring-servlet.xml у меня есть

<context:annotation-config />
<context:component-scan base-package="net.kurochenko.sampleapp" />

Регистрация форматеров :

public class FormattingFactory extends FormattingConversionServiceFactoryBean {

    @Override
    public void installFormatters(FormatterRegistry registry) {
        super.installFormatters(registry);
        registry.addFormatterForFieldAnnotation(new AuthorAnnotationFormatterFactory());
        registry.addFormatterForFieldAnnotation(new DepartmentAnnotationFormatterFactory());
    }   
}

FormattingFactory bean

<mvc:annotation-driven conversion-service="formattingFactory" />

Все вышеперечисленные классы находятся в пакете net.kurochenko.sampleapp.

Служба автоматического подключения @Controller работает нормально.Я искал решение в Google и попробовал некоторые из них, но исключение все еще остается.Что я делаю неправильно?Спасибо за советы.

1 Ответ

1 голос
/ 04 июля 2011

Скорее всего, вы регистрируете свой форматер с помощью new DepartmentFormatter().Он не будет работать таким образом - у Spring нет возможности внедрить зависимости.

Вы должны зарегистрировать экземпляр bean-компонента Spring (созданного Spring).Будь то программно или через xml.

...