Spring&kotlin:构造函数和lateinit注入有什么区别?

我的应用程序使用spring kotlin时遇到了问题。 一开始我有一个控制器和一个这样的服务:

这是服务:

@Service class StuffService { @Inject lateinit var environment : Environment fun doStuff() = [HERE FUNCTION CODE USING environment VARIABLE] } 

这里是控制器:

 @RestController class StuffController { @Inject lateinit var stuffService : StuffService @RequestMapping("/doStuff") fun doStuff() = stuffService.doStuff() } 

不幸的是,当我启动springboot时,这给了我这个错误:

 kotlin.UninitializedPropertyAccessException: lateinit property environment has not been initialized 

所以我试图通过构造函数注入:

 @Service class StuffService(val environment : Environment) {...} @RestController class StuffController(val stuffService: StuffService) {...} 

随着代码的工作! 我没有错误。

我不知道有什么区别。 我不明白发生了什么事。 任何人都可以帮助我理解?