Est-il possible de faire quelque chose comme suivre à Kotlin?
@Autowired
internal var mongoTemplate: MongoTemplate
@Autowired
internal var solrClient: SolrClient
Bien sûr, c'est possible, vous avez peu d'options, je suggère un constructeur annoté, mais Lateinit fonctionne aussi, et peut-être utile dans certains cas:
Lateinit:
@Component
class YourBean {
@Autowired
lateinit var mongoTemplate: MongoTemplate
@Autowired
lateinit var solrClient: SolrClient
}
Constructeur:
@Component
class YourBean @Autowired constructor(
private val mongoTemplate: MongoTemplate,
private val solrClient: SolrClient
) {
// code
}
Constructeur avec Spring 4.3:
@Component
class YourBean(
private val mongoTemplate: MongoTemplate,
private val solrClient: SolrClient
) {
// code
}
La version du constructeur vérifie toutes les dépendances au moment de la création du bean et tous les champs injectés - val, mais les champs injectés tardivement ne peuvent être que var et leur encombrement d'exécution est faible. Et pour tester la classe avec un constructeur, vous n'avez pas besoin de réflexion.
Liens:
Oui, Java sont supportées dans Kotlin, essentiellement comme en Java. Un des pièges à éviter est que les annotations sur le constructeur principal nécessitent le mot-clé explicite 'constructor':
De https://kotlinlang.org/docs/reference/annotations.html
Si vous devez annoter le constructeur principal d'une classe, vous devez ajouter le mot clé constructor à la déclaration du constructeur, puis ajouter les annotations qui la précèdent:
class Foo @Inject constructor(dependency: MyDependency) {
// ...
}
Vous pouvez également autoriser les dépendances via le constructeur. N'oubliez pas d'annoter vos dépendances avec @Configuration, @Component, @Service
etc
import org.springframework.stereotype.Component
@Component
class Foo (private val dependency: MyDependency) {
//...
}