将其注入类时,何时应将参数声明为val?

问题描述 投票:1回答:1

我在MVC Play应用程序(使用javax.inject.Injectcom.google.inject.Inject)中创建类似Controller或Service层的内容时,我已经看到了依赖注入:

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

而且我也看到它写得像这样:

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

写一个在另一个上有什么好处吗?有什么不同?

如果我冒险猜测,我认为一个实例化该参数的新实例,其中另一个只重用传入的参数的相同实例,但我不知道哪个是哪个,我不知道知道这是否正确。

scala dependency-injection playframework
1个回答
2
投票

它不是关于注射,而是关于类属性。

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`

这是一个很好的主题:Do scala constructor parameters default to private val?

© www.soinside.com 2019 - 2024. All rights reserved.