Tavaszi Csizma és Kotlin

1. Áttekintés

Januárban nagy bejelentést tettek a tavaszi ökoszisztémában: A Kotlin támogatása a Spring Framework 5-hez érkezik. Ez azt jelenti, hogy a Spring Boot 2.x első osztályú támogatást nyújt a Kotlin számára.

Ez természetesen nem váratlan, mivel a Pivotal csapata olyan JVM nyelvek elfogadásáról ismert, mint a Scala és a Groovy.

Készítsünk egy Kotlin alkalmazást a Spring Boot 2.x alkalmazással!

2. Beállítás

2.1. Környezet

Kotlin támogatja az IntelliJ, az Eclipse és a parancssor fejlesztését. Kövesse az utasításokat a környezet beállításához, a preferenciák alapján.

2.2. Beállít

Először hozzunk létre egy Spring Boot 2 projektet, és módosítsuk a POM-ot, hogy tartalmazzon bejegyzéseket, amelyek meghatározzák a Java és Kotlin verzióit a függőségekkel:

 org.jetbrains.kotlin kotlin-stdlib-jre8 1.2.71 org.jetbrains.kotlin kotlin-reflect 1.2.71 com.fasterxml.jackson.module jackson-module-kotlin 2.9.9 

Vegye figyelembe, hogy a Kotlin forrás- és tesztfájljainkhoz megadjuk a fájlok helyét:

$ {project.basedir} / src / main / kotlin $ {project.basedir} / src / test / kotlin

Ha a Kotlin-fájljaink különböző helyeken vannak, módosítania kell ezeket a bejegyzéseket a POM-ban.

A Kotlin modulok és források összeállításához használnunk kell kotlin-maven-plugin:

 kotlin-maven-plugin org.jetbrains.kotlin 1.1.2 tavasz 1.8 összeállítás fordítás összeállítás teszt-fordítás teszt-összeállítás teszt-összeállítás org.jetbrains.kotlin kotlin-maven-allopen 1.1.2 

Rendben, most minden megvan, ami a Kotlin alkalmazás felépítéséhez szükséges. Referenciaként: megtalálhatja a Maven Central (rugós-boot-starter-web, kotlin-stdlib-jre8, kotlin-reflektálás, jackson-module-kotlin, teszt).

Ezután állítsuk be alkalmazási környezetünket.

3. Az alkalmazás kontextusa

Ugorjunk át néhány Kotlin-kódra, és írjuk meg a Spring Boot alkalmazás ismerős környezetét:

@SpringBootApplication osztály KotlinDemoApplication fun main (args: Array) {SpringApplication.run (KotlinDemoApplication :: class.java, * args)}

Látjuk ismerősünket @SpringBootApplication annotáció. Ez ugyanaz a feljegyzés, amelyet egy Java osztályban használnánk.

Alatta van egy osztálymeghatározás a sajátunkra KotlinDemoApplication osztály. Kotlinban az osztályok alapértelmezett hatóköre nyilvános, így ezt elhagyhatjuk. Ezenkívül, ha egy osztálynak nincsenek változói és funkciói, akkor göndör zárójelek nélkül deklarálható. Tehát lényegében éppen meghatároztunk egy osztályt.

Továbblépés a módszerre. Ez a Java szabványos Java belépési pont-módszere: public static void main (String [] érvel).

A módszerek vagy függvények alapértelmezés szerint ismét nyilvánosak, ezért itt nem kell ezt deklarálnunk. Ezenkívül azoknak a funkcióknak, amelyek nem adnak vissza semmit, nem kell megadniuk az érvénytelen visszatérési típust.

És végül, az osztály testén kívül definiált bármely funkció automatikusan statikus. Ez alkalmassá teszi ezt a függvényt az indítás végrehajtására.

Most futtassuk az alkalmazásunkat a gyökérkönyvtárból a mvn spring-boot: fut. Az alkalmazásnak el kell indulnia, és látnunk kell, hogy az alkalmazásunk a 8080-as porton fut.

Ezután építsünk egy vezérlőt.

4. Vezérlő

Vessünk egy pillantást egy vezérlő hozzáadására szolgáltatásunkba:

@RestController osztály HelloController {@GetMapping ("/ hello") fun helloKotlin (): String {return "hello world"}}

Nem túl különbözik a szokásos Spring vezérlőtől, de minden bizonnyal kevesebb kódot. Adjunk hozzá egy tesztosztályt és esetet ehhez a vezérlőhöz a munkánk ellenőrzéséhez:

@RunWith (SpringRunner :: class) @SpringBootTest (class = arrayOf (KotlinDemoApplication :: class), webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) class KotlinDemoApplicationTests {@Autowired lateinit var testRestTestTemplate @ TestRestTestate Mall = TestRestTestate Mall (TestRestTestate} TestRestTestate TestRestTestate TestRestTestate TestRestTestate TestRestTestate TestRestTestate TestRestTestate TestRestTestate TestRestTestate TestRestTestate TestRestTestate TestRestTestate TestRestTestate TestRestTestate TestRestTestate TestRestTestate TestTeszt TesztTesztPalátus: TestRestTemplate eredmény // ... .getForEntity ("/ hello", String :: class.java) assertNotNull (result) assertEquals (result? .statusCode, HttpStatus.OK) assertEquals (result? .body, "hello world")}}

Ez a teszt megmutatja Kotlin egyik nagyon hatékony funkcióját - semmilyen biztonságot! A null értékű Kotlin-változókat a „?” Használatával kell deklarálni. A fordító ekkor tudja, hogy az adott tulajdonság elérése előtt védekező kódolásra van szükség.

Tesztünk során TestRestTemplate nullable típusként definiálva van, és ahányszor elérünk hozzá, a null? koalescing operátor "?" - amely nullat ad vissza, ha a meghívott objektum null.

Ez tisztázza a nullák használatát a programban, és arra kényszeríti a fejlesztőket, hogy biztonságos kódot írjanak, amikor velük dolgoznak.

Ezután adjunk hozzá egy szolgáltatást, és integráljuk azt a vezérlőnkbe.

5. Szolgáltatás

Ahogy azt most már valószínűleg kitalálhatja, szolgáltatásunkat elég könnyű hozzáadni a projektünkhöz. Tegyük ezt most:

@Service osztály HelloService {fun getHello (): String {return "hello service"}}

Itt elég egyszerű szolgáltatás, egyetlen funkcióval, amely String-et ad vissza. Ezután kapcsoljuk be a szolgáltatásunkat a vezérlőbe, és használjuk az érték visszaadására:

@RestController osztály HelloController (val helloService: HelloService) {// ... @GetMapping ("/ hello-service") fun helloKotlinService (): String {return helloService.getHello ()}}

Ahh, ez szépen néz ki! Kotlinban a fő konstruktor az osztálydeklarációval sorban határozható meg. Elhagytuk a @Autowired a konstruktorunk feljegyzése, mert ez egy ideje nem kötelező.

Ezek a paraméterek automatikusan konvertálódnak az osztály mezőibe. Kotlin ezeket tulajdonságoknak nevezik. Nincs meghatározva getterek vagy beállítók; automatikusan jönnek létre. Természetesen felülírhatja ezeket az alapértelmezett beállításokat, ha akarja.

Kotlinban az osztályok tulajdonságait és a függvények változóit a segítségével lehet meghatározni var vagy val. Var mutatható tulajdonságot jelöl, és val véglegeset jelöl. Ez lehetővé teszi a fordító számára, hogy ellenőrizze az illegális hozzáférést. Mivel a mi HelloService egy szingulett, mi úgy kötjük össze, mint a val hogy megakadályozzák a mutációt.

Ezután adjunk hozzá egy tesztet ehhez a vezérlő módszerhez:

@Test fun whenCalled_shouldReturnHelloService () {var result = testRestTemplate // ... .getForEntity ("/ hello-service", String :: class.java) assertNotNull (result) assertEquals (result? .StatusCode, HttpStatus.OK) assertEquals ( eredmény? .body, "hello service")}

Végül nézzük meg, hogy néz ki egy POJO Kotlinban.

6. Kotlin adatosztály

A Java-ban egyszerű objektumokkal, a POJO-val ábrázoljuk az adatobjektumokat. Kotlinban van valami, ami lehetővé teszi számunkra, hogy az ilyen típusú objektumokat tömörebben kifejezzük - egy adatosztályt.

Írjunk egy adatobjektumot, amely visszatér a vezérlőnkbe:

HelloDto adatosztály (üdvözlet: String)

Ez nem volt trükk. Nem hagyok ki semmit az osztályunkból. Az adatmódosítóval sok előnyt kapunk. Ez a kulcsszó automatikusan létrehoz egy egyenlő / hashcode pár, a Sztring és másolási funkció. Mindezt egy 53 karakteres egyvonalas vonalról!

Most adjunk hozzá egy módszert az új adatosztály visszaadásához:

// ... @GetMapping ("/ hello-dto") fun helloDto (): HelloDto {return HelloDto ("Hello from the dto")}

Az adatmódosító nem ad hozzá alapértelmezett konstruktort, ami fontos bizonyos könyvtárak számára, mint például Jackson. Az ilyen típusú osztályok támogatásához felvettük a jackson-modul-kotlin a POM fájlunkba a marsalling támogatása érdekében. Ez a 2. szakasz során történt, és ott láthatja a függőséget.

Végül adjunk hozzá egy tesztet ehhez a vezérlőfunkcióhoz:

@Test fun whenCalled_shoudlReturnJSON () {val result = testRestTemplate // ... .getForEntity ("/ hello-dto", HelloDto :: class.java) assertNotNull (result) assertEquals (result? .StatusCode, HttpStatus.OK) assertEquals ( eredmény? .body, HelloDto ("Hello from the dto"))}}

7. Következtetés

Ebben a cikkben a Spring Boot 2.x Kotlin támogatását néztük meg. Példákból láthattuk, hogy Kotlin egyszerűsítheti és tovább fejlesztheti alkalmazásainkat azáltal, hogy rövidebb, biztonságosabb kód írására kényszerít minket.

A Kotlin emellett olyan csodálatos funkciókat is támogat, mint az adatosztály, az osztálybővítmények, és teljes mértékben kompatibilis a meglévő Java kódokkal. Ez azt jelenti, hogy írhat Kotlin kódot, és meghívhatja azt Java osztályaiból és verse-ből. Ezenkívül a Kotlint az alapoktól fogva építették fel, hogy fantasztikus támogatást kapjon egy IDE-ben, és ez így is van.

Nagyon sok oka van a Kotlin kipróbálásának, és mivel a Google és Spring támogatják, most itt az ideje, hogy ellenőrizze. Mondja el, mit döntött úgy, hogy felhasználja!

Mindig megtalálhatja a forráskódot a GitHubon.