how to use spring annotations like @Autowired or @Value in kotlin for primitive types?

fkurth picture fkurth · Sep 15, 2017 · Viewed 22.9k times · Source

Autowiring a non-primitive with spring annotations like

@Autowired
lateinit var metaDataService: MetaDataService

works.

But this doesn't work:

@Value("\${cacheTimeSeconds}")
lateinit var cacheTimeSeconds: Int

with an error:

lateinit modifier is not allowed for primitive types.

How to autowire primitve properties into kotlin classes?

Answer

anstue picture anstue · Dec 11, 2019

You can also use the @Value annotation within the constructor:

class Test(
    @Value("\${my.value}")
    private val myValue: Long
) {
        //...
  }

This has the benefit that your variable is final and none-nullable. I also prefer constructor injection. It can make testing easier.