Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Java Spring
  3. Support Kotlin
Extrait - Java Spring Construisez vos applications réactives avec une architecture micro-services en environnement Jakarta EE (2e édition)
Extraits du livre
Java Spring Construisez vos applications réactives avec une architecture micro-services en environnement Jakarta EE (2e édition) Revenir à la page d'achat du livre

Support Kotlin

Utilisation de Kotlin

Spring fonctionne de manière transparente avec Kotlin, offrant une intégration fluide entre les deux langages. Kotlin, en tant que langage moderne et concis, apporte des éléments en plus par rapport à Java, tels que le typage nullable par défaut, les propriétés, les fonctions d’extension et la déclaration des classes de données, qui simplifient et améliorent la lisibilité du code. Grâce à la compatibilité totale avec les bibliothèques Java existantes, Spring peut profiter pleinement des avantages de Kotlin sans aucune friction. Les développeurs peuvent donc bénéficier de la puissance et de la flexibilité de Kotlin pour développer des applications plus efficaces et expressives, tout en tirant parti de l’écosystème mature et solide de Spring pour créer des applications robustes et évolutives. Cette combinaison gagnante permet aux développeurs de concevoir des solutions modernes et performantes tout en préservant la compatibilité avec les projets existants fondés sur Java. Avec Kotlin, tout ce qui est réalisable avec Java reste également possible.

1. Avantages

Kotlin offre plusieurs avantages par rapport à Java lorsqu’il s’agit de développer des applications réactives.

a. Concision du code

Kotlin est un langage plus concis que Java, ce qui signifie que vous pouvez écrire moins de code pour accomplir la même tâche. Cela rend le code plus lisible et maintenable, ce qui est particulièrement important dans les applications réactives où la gestion des flux et des événements peut être complexe.

Par exemple, pour créer un flux réactif de nombres de 1 à 10, en Java, il faut écrire Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), tandis qu’en Kotlin, cela se résume simplement à (1..10).asFlow(). Cette concision rend le code plus clair et facile à lire.

// Java 
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); 
List<Integer> squaredNumbers = numbers.stream() 
                                     .map(n...

Utiliser Kotlin avec Reactor

Reactor prend en charge Kotlin 1.1+ et nécessite kotlin-stdlib (ou l’une de ses variantes kotlin-stdlib-jdk7 et kotlin-stdlib-jdk8). Les extensions Kotlin sont dans le module dédié reactor-kotlin-extensions avec un nom de package commençant par reactor.kotlin. L’API Reactor KDoc répertorie et documente toutes les extensions Kotlin disponibles. 

1. Null safety étendue

Reactor va plus loin en fournissant une null safety pour l’ensemble de son API grâce à des annotations déclarées dans le package reactor.util.annotation. Les développeurs Kotlin bénéficient ainsi d’une sécurité nulle complète, même avec des types Java utilisés dans Kotlin. Les vérifications JSR 305 peuvent être configurées pour renforcer la sécurité nulle selon les besoins du projet. Bien que certaines fonctionnalités ne soient pas encore totalement prises en charge, l’équipe prévoit de les inclure dans les prochaines versions. Vous pouvez configurer les vérifications JSR 305 en ajoutant l’indicateur de compilateur -Xjsr305 avec les options suivantes : -Xjsr305={strict|warn|ignore}.

2. Types réifiés

Les paramètres de type réifiés en Kotlin sont une fonctionnalité qui permet de conserver...

CRUD pour un utilisateur

1. CRUD simple

Voici un exemple d’application Spring WebFlux en Kotlin qui expose un CRUD pour l’entité utilisateur.

 Définissez l’entité utilisateur User.

data class User(val id: Long, val name: String, val email: String) 

 Créez un répertoire UserRepository pour gérer les utilisateurs.

interface UserRepository { 
    fun findAll(): Flux<User> 
    fun findById(id: Long): Mono<User> 
    fun save(user: User): Mono<User> 
    fun update(id: Long, user: User): Mono<User> 
    fun delete(id: Long): Mono<Void> 
}  

 Implémentez le répertoire en mémoire.

@Component 
class InMemoryUserRepository : UserRepository { 
 
    private val users = ConcurrentHashMap<Long, User>() 
 
    override fun findAll(): Flux<User> { 
        return Flux.fromIterable(users.values) 
    } 
 
    override fun findById(id: Long): Mono<User> { 
        return Mono.justOrEmpty(users[id]) 
    } 
 
    override fun save(user: User): Mono<User> { 
        users[user.id] = user 
        return Mono.just(user) 
    } 
 
    override fun update(id: Long, user: User): Mono<User> { 
        if (users.containsKey(id)) { 
            users[id] = user 
            return Mono.just(user) 
        } 
        return Mono.empty() 
    } 
 
    override fun delete(id: Long): Mono<Void> { 
        users.remove(id) 
        return...

Conclusion

L’utilisation de Kotlin pour la programmation réactive avec Reactor présente de nombreux avantages par rapport à Java. Kotlin offre une syntaxe plus claire et concise, ce qui rend le code plus lisible et maintenable. De plus, Kotlin prend en charge la sécurité nulle, évitant ainsi les célèbres NullPointerException. Grâce à son interopérabilité avec Java, les développeurs peuvent facilement intégrer des bibliothèques existantes dans leurs applications Kotlin réactives. En combinant la puissance de Kotlin avec les fonctionnalités de Reactor, les développeurs peuvent créer des applications réactives plus robustes et efficaces.