Когда я должен объявить параметр как val при внедрении его в класс? - PullRequest
1 голос
/ 29 марта 2019

Я видел инъекцию зависимостей, записанную следующим образом при создании чего-то вроде слоя Controller или Service в приложениях MVC Play (с использованием javax.inject.Inject или com.google.inject.Inject):

class Controller @Inject()(thing: Something) { ... }

И я также виделэто написано так:

class Controller @Inject()(val thing: Something) { ... }

Есть ли польза от написания одного над другим?В чем разница?

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

1 Ответ

2 голосов
/ 29 марта 2019

Речь идет не о инъекции, а о свойствах класса.

class Controller @Inject()(thing: Something) { ... }

Объявляет параметр конструктора.Вы можете использовать thing в теле класса.

class Controller @Inject()(val thing: Something) { ... }

Создает геттер thing.Таким образом, его можно использовать позже как:

class Controller @Inject()(val thing: Something) { ... }
val c1 = new Controller('Something')
c1.thing \\ here is `Something`

Вот хорошая нить об этом: Параметры конструктора scala по умолчанию имеют значение private val?

...