Spring MVC Dependency Injection не работает в объекте, вызываемом из RequestMappingController - PullRequest
0 голосов
/ 09 марта 2011

Когда я пытаюсь сделать, как показано ниже, и у меня есть класс контроллера RequestMapping в Spring MVC, который создает и вызывает внешний класс, я не могу использовать внедрение зависимостей в этом классе, например, если я пытаюсь использовать

@Resource(name = "savedsearchesService")
        private SavedSearchesService savedsearchesService;

Я получаю исключение нулевого указателя. Вместо этого я должен передать SavedSearchesService savedsearchesService из моего метода контроллера в другой внешний метод, чтобы заставить его работать.

Мне интересно, может ли кто-нибудь указать, почему это так, потому что мне любопытно, и есть ли что-то, чего мне не хватает, как правильно это сделать. Спасибо

@Controller
@RequestMapping("")
public class MainController {

    @Resource(name = "savedsearchesService")
    private SavedSearchesService savedsearchesService;

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String getPersons(Model model, HttpServletRequest request)
            throws IOException {

        HttpSession session = request.getSession();


        SomeExternalClass someExternalClass = new SomeExternalClass ();
        someExternalClass.Main();
    }

}

Вот пример внешнего класса:

public class SomeExternalClass {

    @Resource(name = "savedsearchesService")
    private SavedSearchesService savedsearchesService;

    public void Main () {
        savedsearchesService.get();

    }
}

1 Ответ

2 голосов
/ 09 марта 2011

Проблема с этой строкой:

SomeExternalClass someExternalClass = new SomeExternalClass();

Все классы, которые зависят от внедрения зависимости пружин, должны быть пружинными , что не имеет место, когда вы создаете экземпляры классов с помощью новое ключевое слово.

Есть несколько альтернатив.Чтобы упомянуть некоторые:

  • Введите SomeExternalClass в ваш контроллер.

  • Создание фабрики с пружинным управлением, которая скрывает логику реализации (например, applicationContext.getBean())

...