我在MVC Play应用程序(使用javax.inject.Inject
或com.google.inject.Inject
)中创建类似Controller或Service层的内容时,我已经看到了依赖注入:
class Controller @Inject()(thing: Something) { ... }
而且我也看到它写得像这样:
class Controller @Inject()(val thing: Something) { ... }
写一个在另一个上有什么好处吗?有什么不同?
如果我冒险猜测,我认为一个实例化该参数的新实例,其中另一个只重用传入的参数的相同实例,但我不知道哪个是哪个,我不知道知道这是否正确。
它不是关于注射,而是关于类属性。
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?