מגף אביב וקוטלין

1. סקירה כללית

הודעה גדולה פורסמה כבר בינואר במערכת האקולוגית באביב: תמיכת קוטלין מגיעה למסגרת האביב 5. המשמעות היא של Spring Boot 2.x תהיה תמיכה מהשורה הראשונה בקוטלין.

זה כמובן לא צפוי, מכיוון שהצוות ב- Pivotal ידוע בקבלת שפות JVM כמו Scala ו- Groovy.

בואו לבנות אפליקציית Kotlin באמצעות אפליקציית Spring Boot 2.x!

2. התקנה

2.1. סביבה

קוטלין תומך בפיתוח ב- IntelliJ, Eclipse ובשורת הפקודה. עקוב אחר ההוראות להגדרת הסביבה שלך בהתבסס על העדפותיך.

2.2. להכין

ראשית, בואו ניצור פרויקט Spring Boot 2 ונשנה את ה- POM כך שיכיל ערכים המציינים את הגרסאות של Java ו- Kotlin עם התלות:

 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 

שים לב שאנו מציינים את מיקומי הקבצים עבור מקור הקוטלין וקבצי הבדיקה שלנו:

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

אם קבצי Kotlin שלנו נמצאים במיקומים שונים, יהיה עליך לשנות את הערכים הללו ב- POM.

כדי להרכיב מודולים ומקורות של קוטלין, עלינו להשתמש תוסף kotlin-maven:

 kotlin-maven-plugin org.jetbrains.kotlin 1.1.2 אביב 1.8 הידור הידור הידור מבחן-קומפילציה מבחן-קומפילציה מבחן-קומפילציה org.jetbrains.kotlin kotlin-maven-allopen 1.1.2 

בסדר, עכשיו יש לנו את כל מה שאנחנו צריכים כדי לבנות את היישום Kotlin שלנו. לעיון: תוכלו למצוא את הגרסאות העדכניות ביותר של מייבן סנטרל (קפיץ-אתחול-רשת, קוטלין-סטדליב-ג'ר 8, קוטלין-משקף, ג'קסון-מודול-קוטלין, מבחן).

לאחר מכן, בואו נגדיר את הקשר היישום שלנו.

3. הקשר היישום

בואו נקפוץ לקוד קוטלין ונכתוב את ההקשר המוכר שלנו ליישום Spring Boot:

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

אנו רואים את המוכר שלנו @ SpringBootApplication ביאור. זו אותה הערה בה נשתמש בשיעור Java.

מתחתיה יש לנו הגדרה כיתתית עבורנו יישום KotlinDemo מעמד. בקוטלין היקף ברירת המחדל לשיעורים הוא ציבורי כדי שנוכל להשמיט זאת. בנוסף, אם למחלקה אין משתנים וללא פונקציות, ניתן להכריז עליה ללא סוגריים מתולתלים. אז בעצם הגדרנו מחלקה.

עוברים לשיטה. זוהי שיטת נקודת הכניסה הסטנדרטית של Java, ב- Java: ראשי סטטי ציבורי ריק (מחרוזת [] טוענת).

שוב, שיטות או פונקציות הן ציבוריות כברירת מחדל, ולכן איננו צריכים להכריז על כך כאן. בנוסף, פונקציות שאינן מחזירות דבר אינן צריכות לציין סוג החזרה ריק.

ולבסוף, כל פונקציה המוגדרת מחוץ לגוף הכיתה היא סטטית אוטומטית. זה הופך את הפונקציה הזו לזמינה לביצוע הפעלה.

עכשיו בואו נפעיל את היישום שלנו מספריית השורש באמצעות קפיץ אתחול mvn: לרוץ. היישום צריך להתחיל, ואנחנו צריכים לראות את היישום שלנו פועל ביציאה 8080.

לאחר מכן, בואו לבנות בקר.

4. בקר

בואו נסתכל על הוספת בקר לשירות שלנו:

מחלקה @RestController HelloController {@GetMapping ("/ שלום") כיף helloKotlin (): מחרוזת {להחזיר "שלום עולם"}}

לא שונה מדי מבקר אביב סטנדרטי אבל בהחלט פחות קוד. בואו נוסיף מחלקת מבחן ומקרה לבקר זה כדי לאמת את עבודתנו:

@RunWith (SpringRunner :: class) @SpringBootTest (classes = arrayOf (KotlinDemoApplication :: class), webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) class KotlinDemoApplicationTests {@Autowired lateinit var testRestTemplate: TestRestTemplate = TestRestTemplate = TestTest TestTest // ... .getForEntity ("/ שלום", מחרוזת :: class.java) assertNotNull (תוצאה) assertEquals (תוצאה? .statusCode, HttpStatus.OK) assertEquals (תוצאה?. גוף, "שלום עולם")}}

בדיקה זו מציגה את אחת התכונות החזקות מאוד של קוטלין - בטיחות בטוחה! יש להכריז על משתני קוטלין שיכולים להיות אפסים באמצעות '?'. המהדר יודע אז שנדרש קידוד הגנתי לפני שניגש למאפיין זה.

במבחן שלנו, TestRestTemplate מוגדר כסוג מבוטל, ובכל פעם שאנו ניגשים אליו, אנו עושים זאת באמצעות אופרטור ההתאחדות האפס "?". - שיחזיר אפס אם האובייקט שנקרא הוא אפס.

זה מבהיר את השימוש באפסים בתוכנית ומאלץ מפתחים לכתוב קוד בטוח בעבודה איתם.

לאחר מכן, בואו נוסיף שירות ונשלב אותו בבקר שלנו.

5. שירות

כפי שאתה בוודאי יכול לנחש עכשיו, השירות שלנו יהיה די קל להוסיף לפרויקט שלנו. בואו נעשה את זה עכשיו:

מחלקת @ שירות HelloService {fun getHello (): מחרוזת {להחזיר "שלום שירות"}}

שירות די פשוט כאן עם פונקציה אחת המחזירה מחרוזת. לאחר מכן, בואו נחבר את השירות שלנו לבקר ונשתמש בו להחזרת ערך:

מחלקה @ RestController HelloController (val helloService: HelloService) {// ... @GetMapping ("/ hello-service") כיף helloKotlinService (): מחרוזת {return helloService.getHello ()}}

אהה, זה נראה נחמד! בקוטלין ניתן להגדיר את הקונסטרוקטור הראשי עם הצהרת הכיתה. השמטנו את ה- @Autowired הערה מהקונסטרוקטור שלנו כי זה לא חובה מזה זמן מה.

פרמטרים אלה מומרים אוטומטית לשדות בכיתה. קוטלין הם נקראים מאפיינים. אין מוגדרים או מגדירים; הם נוצרים באופן אוטומטי. אתה יכול, כמובן, לעקוף את ברירות המחדל הללו אם תרצה בכך.

בקוטלין ניתן להגדיר מאפיינים בכיתות ומשתנים בפונקציות באמצעות var אוֹ val. Var מציין מאפיין משתנה, ו- val מציין אחד אחרון. זה מאפשר למהדר לבדוק גישה לא חוקית. מאז שלנו HelloService הוא יחיד, אנו מחברים אותו כ- val כדי למנוע מוטציה.

לאחר מכן, בואו נוסיף בדיקה לשיטת בקר זו:

@Test fun whenCalled_shouldReturnHelloService () {var result = testRestTemplate // ... .getForEntity ("/ hello-service", String :: class.java) assertNotNull (result) assertEquals (result? .StatusCode, HttpStatus.OK) assertEquals ( תוצאה?. גוף, "שלום שירות")}

לבסוף, בואו נסתכל איך נראה POJO בקוטלין.

6. מחלקת נתונים של קוטלין

ב- Java אנו מייצגים אובייקטים של נתונים עם אובייקטים ישנים רגילים של Java, ה- POJO. בקוטלין יש לנו משהו שמאפשר לנו להביע אובייקט מסוג זה בצורה תמציתית יותר - מחלקת נתונים.

בואו נכתוב אובייקט נתונים שיחזור בבקר שלנו:

מחלקת נתונים HelloDto (ברכת val: מחרוזת)

זה לא היה שום טריק. אני לא משמיט שום דבר מהכיתה שלנו. עם שינוי הנתונים אנו מקבלים יתרונות רבים. מילת מפתח זו יוצרת אוטומטית שווה / hashcode זוג, א toString פונקציה, ופונקציית העתקה. כל זה מתוך קו תווי 53 תווים!

עכשיו בואו נוסיף שיטה להחזרת מחלקת הנתונים החדשה שלנו:

// ... @ GetMapping ("/ hello-dto") כיף helloDto (): HelloDto {להחזיר HelloDto ("שלום מה- dto")}

שינוי הנתונים אינו מוסיף קונסטרוקטור ברירת מחדל, שחשוב לספריות מסוימות כמו ג'קסון. כדי לתמוך בכיתה מסוג זה הוספנו את ה- ג'קסון-מודול-קוטלין לקובץ ה- POM שלנו לתמיכה במרשל. זה נעשה במהלך סעיף 2, ותוכלו לראות את התלות שם.

לבסוף, בואו נוסיף בדיקה לפונקציית בקר זו:

@Test fun whenCalled_shoudlReturnJSON () {val result = testRestTemplate // ... .getForEntity ("/ hello-dto", HelloDto :: class.java) assertNotNull (result) assertEquals (result? .StatusCode, HttpStatus.OK) assertEquals ( תוצאה?. גוף, HelloDto ("שלום מה- dto"))}

7. מסקנה

במאמר זה, בחנו את התמיכה בקוטלין ב- Spring Boot 2.x. ראינו מדוגמאות שקוטלין יכול לפשט ולשפר את היישומים שלנו בכך שהוא מכריח אותנו לכתוב קוד קצר ובטוח יותר.

Kotlin תומך גם בכמה תכונות מדהימות כמו מחלקת הנתונים, סיומות מחלקה, ותואם לחלוטין לקוד Java הקיים. המשמעות היא שאתה יכול לכתוב קוד Kotlin ולקרוא לו משיעורי Java שלך ולהפך. בנוסף, קוטלין נבנה מהיסוד כדי לקבל תמיכה נהדרת ב- IDE, וזה קורה.

יש הרבה סיבות לנסות את קוטלין, וכשגוגל ואביב מגבים את זה, זה הזמן לבדוק את זה. ספר לנו מה החלטת לבנות באמצעות זה!

תמיד תוכל למצוא את קוד המקור ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found