#scala #dependency-injection #playframework #compile-time
Вопрос:
Я провел рефакторинг своего игрового приложения с использования Guice на использование DI во время компиляции.
В Guice, когда мы не украшаем класс @Singleton
, при необходимости может быть создано множество экземпляров.
Во время компиляции DI мы создаем экземпляр, который будет введен один раз, поэтому я думаю, что он эквивалентен одноэлементному.
Мой вопрос в том, потеряю ли я какую-либо производительность, ограничив все только одним экземпляром. Например, если у меня есть экземпляр serviceA
с методом doSomething
и с учетом того , что все не имеет состояния. Если у меня 32-ядерный процессор и поступает много запросов. Сможет ли Play в контексте DI во время компиляции использовать полную мощность процессора?
Ответ №1:
AFAiK Guice (и другие платформы runtime DI) по умолчанию не создают синглеты по единственной причине, чтобы быть быстрее при создании экземпляров и упростить сложный (потенциально циклический) график зависимостей. Их цель — начать быстрее.
Наличие у вас 1 или 2 экземпляров ServiceA
не повлияет на производительность использования этих экземпляров после их создания.
Теоретически даже лучше иметь синглеты.
Комментарии:
1. Спасибо, что прояснили это для меня.