Я пишу небольшое приложение Spring, состоящее из модели, представленной фасадным объектом с именем service
и представлением на основе JSP. Между ними у меня есть обычные контроллеры Spring и конвертер, который преобразует идентификатор строки в объект из модели.Не удается получить доступ к объекту с автоподстановкой в преобразователе Spring
Этот преобразователь использует служебный объект, который является @Autowired
, чтобы найти нужный объект модели от service
. Проблема в том, что всякий раз, когда конвертер обращается к методу в service
, ничего не происходит. Нет ошибок или исключений, он просто продолжается и возвращает null.
Я уже проверил, правильно ли инициализирован service
, и это не похоже на проблему. Во время отладки я заметил, что программа проходит через ThreadPoolExecutor
и останавливается там, когда я пытаюсь выполнить метод на service
. Это заставляет меня предположить, что проблема связана с доступом к service
, пока он заблокирован.
Я уже пытался поместить необходимый код в синхронизированный блок, но это не помогает. Может ли кто-нибудь сказать мне, почему я не могу получить доступ к каким-либо методам из объекта @Autowired
в конвертере Spring?
Вот класс конвертера для чего это стоит:
public class IdToPublisherConverter implements Converter<String, Publisher>{
@Autowired
private MainService service;
@Override
public Publisher convert(String id) {
return service.getPublisher(Long.getLong(id));
}
}
EDIT:
MainService
является объектом фасада, который предоставляет интерфейс для получения, добавлять, обновлять и удалять мои данные модели (Game
объектов и Publisher
объектов)
service.getPublisher(id)
получает объект Publisher
от service
, основанный на идентификаторе типа длинный конвертер, полученный со страницы JSP. Этот метод переходит к следующему методу в MainService
:
@Override
public Publisher getPublisher(long id) {
Publisher publisher = repository.readPublisher(id);
return publisher;
}
Который идет в:
private final Map<Long, Publisher> publishers;
...
@Override
public Publisher readPublisher(long id) {
return publishers.get(id);
}
Что такое 'MainService'? Что делает 'getPublisher'? Укажите [MCVE]. – Savior
Вы уже заявляете, что инициализируется «service» (и, таким образом, выполняется аутсорсинг) и определяется, что объект, на который ссылается «service», заблокирован. Поэтому нам нужно посмотреть, что делает 'service.getPublisher (...)' (код, а не описание), чтобы рассказать вам, почему он заблокирован и т. Д. – Thomas
Вы уверены, что карта 'издателей в вашем репозитории не пуст? – home