Я пытаюсь понять, как использовать внедрение зависимостей в Play Framework 2.4. Я знаком с общими принципами, но не совсем понимаю их значение для дизайна. Мои общие рассуждения заключались в том, что статические методы в классах контроллеров слишком похожи на использование глобальных переменных и могут легко вызвать проблемы с безопасностью потоков и т. Д., А также в целом поощряют плохой дизайн. Итак, поскольку Play теперь поощряет переход на внедрение зависимостей, я тоже должен переключиться.
Что меня смущает, так это то, что является хорошей практикой в этом контексте. Когда я читаю официальную документацию Play, в ней кратко говорится о внедрении зависимостей, а затем сразу упоминается аннотация @Singleton. И доступный пример (http://www.typesafe.com/activator/template/play-guice) также говорит об одноэлементном классе WelcomeTextGenerator.
Итак, мне интересно, следует ли мне использовать одноэлементные объекты, как, похоже, подразумевают примеры? Если это так, то в чем преимущество по сравнению со старым подходом статических методов? Существуют ли определенные типы объектов (например, контроллеры?), Которые должны быть одиночными, и есть ли последствия для производительности, если не помечать объекты как одиночные?