将参数注入到类中时,何时应该将参数声明为val?

时间:2019-03-29 09:41:21

标签: scala dependency-injection playframework

我已经看到在MVC Play应用(使用javax.inject.Injectcom.google.inject.Inject中创建诸如Controller或Service层之类的东西时,依存关系注入是通过以下方式编写的:

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

我也看到过这样写:

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

将一个写成另一个有什么好处吗?有什么区别?

如果我要冒险猜一猜,我想一个实例化该参数的新实例,而另一个实例仅重用传入的那个参数的相同实例,但是我不知道哪个是哪个,而我不知道那是否正确。

1 个答案:

答案 0 :(得分: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?