我已经看到在MVC Play应用(使用javax.inject.Inject
或com.google.inject.Inject
中创建诸如Controller或Service层之类的东西时,依存关系注入是通过以下方式编写的:
class Controller @Inject()(thing: Something) { ... }
我也看到过这样写:
class Controller @Inject()(val thing: Something) { ... }
将一个写成另一个有什么好处吗?有什么区别?
如果我要冒险猜一猜,我想一个实例化该参数的新实例,而另一个实例仅重用传入的那个参数的相同实例,但是我不知道哪个是哪个,而我不知道那是否正确。
答案 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?