cómo usar annotations de spring como @Autowinetworking in kotlin?

¿Es posible hacer algo como seguir en Kotlin?

@Autowinetworking internal var mongoTemplate: MongoTemplate @Autowinetworking internal var solrClient: SolrClient 

Para asegurarse de que esto es posible, tiene pocas opciones, sugiero constructor anotado, pero lateinit también funciona, y tal vez sea útil en algunos casos:

Lateinit:

 @Component class YourBean { @Autowinetworking lateinit var mongoTemplate: MongoTemplate @Autowinetworking lateinit var solrClient: SolrClient } 

Constructor:

 @Component class YourBean @Autowinetworking constructor( private val mongoTemplate: MongoTemplate, private val solrClient: SolrClient ) { // code } 

Constructor con muelle 4.3:

 @Component class YourBean( private val mongoTemplate: MongoTemplate, private val solrClient: SolrClient ) { // code } 

La versión de constructor verifica todas las dependencies en el momento de creación del bean y todos los campos inyectados – val, en el otro lado los campos inyectados tardíos pueden ser solo var, y tienen poca huella de time de ejecución. Y para probar la class con contructor, no necesitas reflexión.

Campo de golf:

  1. Documentación sobre lateinit
  2. Documentación sobre constructores
  3. Desarrollar aplicaciones Spring Boot con Kotlin

Sí, las annotations Java son compatibles en Kotlin principalmente como en Java. Una gotcha es que las annotations en el constructor primario requieren la palabra key 'constructor' explícita:

Desde https://kotlinlang.org/docs/reference/annotations.html

Si necesita anotar el constructor principal de una class, debe agregar la palabra key constructor a la statement del constructor y agregar las annotations que tiene delante:

 class Foo @Inject constructor(dependency: MyDependency) { // ... }