Lớp dữ liệu trừu tượng python
Hướng dẫn này chỉ cho bạn cách xây dựng một ứng dụng blog mẫu hiệu quả bằng cách kết hợp sức mạnh của Spring Boot và Kotlin Show
Nếu bạn đang bắt đầu với Kotlin, bạn có thể học ngôn ngữ này bằng cách đọc tài liệu tham khảo, làm theo hướng dẫn Kotlin Koans trực tuyến hoặc chỉ sử dụng tài liệu tham khảo Spring Framework hiện cung cấp các mẫu mã trong Kotlin Hỗ trợ Spring Kotlin được ghi lại trong tài liệu tham khảo Spring Boot và Spring Boot. Nếu bạn cần trợ giúp, hãy tìm kiếm hoặc đặt câu hỏi với các thẻ 7 và 8 trên StackOverflow hoặc tham gia thảo luận trong kênh 9 của Kotlin SlackTạo một dự án mớiĐầu tiên chúng ta cần tạo một ứng dụng Spring Boot, có thể thực hiện theo một số cách Sử dụng trang web InitializrTruy cập https. //bắt đầu. mùa xuân. io và chọn ngôn ngữ Kotlin. Gradle là công cụ xây dựng được sử dụng phổ biến nhất trong Kotlin và nó cung cấp Kotlin DSL được sử dụng theo mặc định khi tạo dự án Kotlin, vì vậy đây là lựa chọn được đề xuất. Nhưng bạn cũng có thể sử dụng Maven nếu cảm thấy thoải mái hơn với nó. Lưu ý rằng bạn có thể sử dụng để chọn Kotlin và Gradle theo mặc định
Các. zip chứa một dự án tiêu chuẩn trong thư mục gốc, vì vậy bạn có thể muốn tạo một thư mục trống trước khi giải nén nó Sử dụng dòng lệnhVí dụ, bạn có thể sử dụng API HTTP Initializr với curl trên hệ thống giống như UN*X
Thêm 1 nếu bạn muốn sử dụng GradleSử dụng IntelliJ IDEASpring Initializr cũng được tích hợp trong phiên bản IntelliJ IDEA Ultimate và cho phép bạn tạo và nhập một dự án mới mà không cần phải thoát khỏi IDE cho dòng lệnh hoặc giao diện người dùng web Để truy cập trình hướng dẫn, hãy chuyển đến Tệp. Mới. Project và chọn Spring Initializr Làm theo các bước của trình hướng dẫn để sử dụng các tham số sau
Hiểu bản dựng GradleNếu bạn đang sử dụng Maven Build, bạn có thể bổ sungNgoài plugin Kotlin Gradle rõ ràng, cấu hình mặc định khai báo tự động mở các lớp và phương thức (không giống như trong Java, vòng loại mặc định là 2 trong Kotlin) được chú thích hoặc siêu chú thích với các chú thích Spring. Điều này rất hữu ích để có thể tạo các hạt đậu 3 hoặc 4 mà không phải thêm từ hạn định 5 theo yêu cầu của các proxy CGLIB chẳng hạnĐể có thể sử dụng các thuộc tính không thể vô hiệu hóa của Kotlin với JPA, cũng được bật. Nó tạo ra các hàm tạo không có đối số cho bất kỳ lớp nào được chú thích bằng 6, 7 hoặc 8 9
Tùy chọn trình biên dịchMột trong những tính năng chính của Kotlin là null-safety - giải quyết rõ ràng các giá trị 0 tại thời điểm biên dịch thay vì chạm vào giá trị nổi tiếng 1 tại thời điểm chạy. Điều này làm cho các ứng dụng an toàn hơn thông qua các tuyên bố về tính vô hiệu và thể hiện ngữ nghĩa "có giá trị hoặc không có giá trị" mà không phải trả chi phí cho các trình bao bọc như 2. Lưu ý rằng Kotlin cho phép sử dụng các cấu trúc chức năng có giá trị nullable; Mặc dù Java không cho phép một người thể hiện tính an toàn không có giá trị trong hệ thống kiểu của nó, nhưng Spring Framework cung cấp tính an toàn không có giá trị cho toàn bộ API Spring Framework thông qua các chú thích thân thiện với công cụ được khai báo trong gói 3. Theo mặc định, các loại từ API Java được sử dụng trong Kotlin được công nhận là loại kiểm tra null được nới lỏng. + Chú thích vô hiệu hóa mùa xuân cung cấp tính an toàn vô hiệu cho toàn bộ Spring Framework API cho các nhà phát triển Kotlin, với lợi thế là xử lý các vấn đề liên quan đến 0 tại thời điểm biên dịchTính năng này có thể được kích hoạt bằng cách thêm cờ trình biên dịch 5 với các tùy chọn 6 9
phụ thuộcCần có 2 thư viện dành riêng cho Kotlin (thư viện chuẩn được thêm tự động bằng Gradle) cho ứng dụng web Spring Boot đó và được định cấu hình theo mặc định
9
Các phiên bản gần đây của H2 yêu cầu cấu hình đặc biệt để thoát đúng các từ khóa dành riêng như 1 2
Plugin Spring Boot Gradle tự động sử dụng phiên bản Kotlin được khai báo thông qua plugin Kotlin Gradle Bây giờ bạn có thể lấy một Hiểu bản dựng Mavenbổ sungNgoài plugin Kotlin Maven rõ ràng, cấu hình mặc định khai báo tự động mở các lớp và phương thức (không giống như trong Java, vòng loại mặc định là 2 trong Kotlin) được chú thích hoặc siêu chú thích với các chú thích Spring. Điều này rất hữu ích để có thể tạo các hạt đậu 3 hoặc 4 mà không phải thêm từ hạn định 5 theo yêu cầu của các proxy CGLIB chẳng hạnĐể có thể sử dụng các thuộc tính không thể vô hiệu hóa của Kotlin với JPA, cũng được bật. Nó tạo ra các hàm tạo không có đối số cho bất kỳ lớp nào được chú thích bằng 6, 7 hoặc 8 0
Một trong những tính năng chính của Kotlin là null-safety - giải quyết rõ ràng các giá trị 0 tại thời điểm biên dịch thay vì chạm vào giá trị nổi tiếng 1 tại thời điểm chạy. Điều này làm cho các ứng dụng an toàn hơn thông qua các tuyên bố về tính vô hiệu và thể hiện ngữ nghĩa "có giá trị hoặc không có giá trị" mà không phải trả chi phí cho các trình bao bọc như 2. Lưu ý rằng Kotlin cho phép sử dụng các cấu trúc chức năng có giá trị nullable; Mặc dù Java không cho phép một người thể hiện tính an toàn không có giá trị trong hệ thống kiểu của nó, nhưng Spring Framework cung cấp tính an toàn không có giá trị cho toàn bộ API Spring Framework thông qua các chú thích thân thiện với công cụ được khai báo trong gói 3. Theo mặc định, các loại từ API Java được sử dụng trong Kotlin được công nhận là loại kiểm tra null được nới lỏng. + Chú thích vô hiệu hóa mùa xuân cung cấp tính an toàn vô hiệu cho toàn bộ Spring Framework API cho các nhà phát triển Kotlin, với lợi thế là xử lý các vấn đề liên quan đến 0 tại thời điểm biên dịchTính năng này có thể được kích hoạt bằng cách thêm cờ trình biên dịch 5 với các tùy chọn 6Cũng lưu ý rằng trình biên dịch Kotlin được cấu hình để tạo Java 8 bytecode (Java 6 theo mặc định) phụ thuộc3 thư viện dành riêng cho Kotlin được yêu cầu cho ứng dụng web Spring Boot đó và được định cấu hình theo mặc định
0
Hiểu ứng dụng được tạo 2
So với Java, bạn có thể nhận thấy thiếu dấu chấm phẩy, thiếu dấu ngoặc trên lớp trống (bạn có thể thêm một số nếu bạn cần khai báo các bean thông qua chú thích 3) và việc sử dụng hàm cấp cao nhất 4. 5 là thành ngữ Kotlin thay thế cho 6 và có thể được sử dụng để tùy chỉnh ứng dụng với cú pháp sau 2
Viết bộ điều khiển Kotlin đầu tiên của bạnHãy tạo một bộ điều khiển đơn giản để hiển thị một trang web đơn giản 8
Lưu ý rằng chúng tôi đang sử dụng ở đây một tiện ích mở rộng Kotlin cho phép thêm các hàm hoặc toán tử của Kotlin vào các loại Spring hiện có. Ở đây chúng ta nhập hàm mở rộng 9 để có thể viết 0 thay vì 1. Spring Framework KDoc API liệt kê tất cả các tiện ích mở rộng của Kotlin được cung cấp để làm phong phú thêm Java APIChúng ta cũng cần tạo các mẫu Mustache liên quan 2 0 3 1 4 2Khởi động ứng dụng web bằng cách chạy chức năng 5 của 6, và đi đến 7, bạn sẽ thấy một trang web tỉnh táo với tiêu đề "Blog"Thử nghiệm với JUnit 5JUnit 5 hiện được sử dụng theo mặc định trong Spring Boot cung cấp nhiều tính năng khác nhau rất tiện dụng với Kotlin, bao gồm tính năng cho phép sử dụng các thuộc tính 8 không thể vô hiệu hóa và khả năng sử dụng ____61_______9/ 00 trên các phương thức không tĩnh thông thườngViết bài kiểm tra JUnit 5 trong KotlinVì lợi ích của ví dụ này, hãy tạo một thử nghiệm tích hợp để chứng minh các tính năng khác nhau
03 3Vòng đời của phiên bản thử nghiệmĐôi khi bạn cần thực thi một phương thức trước hoặc sau tất cả các bài kiểm tra của một lớp nhất định. Giống như Junit 4, JUnit 5 theo mặc định yêu cầu các phương thức này là tĩnh (có nghĩa là trong Kotlin, khá dài dòng và không đơn giản) vì các lớp kiểm tra được khởi tạo một lần cho mỗi lần kiểm tra Nhưng Junit 5 cho phép bạn thay đổi hành vi mặc định này và khởi tạo các lớp kiểm tra một lần cho mỗi lớp. Điều này có thể được thực hiện trong , ở đây chúng tôi sẽ sử dụng tệp thuộc tính để thay đổi hành vi mặc định cho toàn bộ dự án Có thể bạn quan tâm 05 4Với cấu hình này, giờ đây chúng ta có thể sử dụng các chú thích 9 và 00 trên các phương thức thông thường như được hiển thị trong phiên bản cập nhật của 08 ở trên 03 5Tạo tiện ích mở rộng của riêng bạnThay vì sử dụng các lớp util với các phương thức trừu tượng như trong Java, Kotlin thường cung cấp các chức năng như vậy thông qua các tiện ích mở rộng của Kotlin. Ở đây chúng ta sẽ thêm một hàm 10 vào loại 11 hiện có để tạo văn bản với định dạng ngày tháng tiếng Anh 12 6Chúng tôi sẽ tận dụng các tiện ích mở rộng này trong phần tiếp theo Kiên trì với JPAĐể làm cho quá trình tìm nạp chậm hoạt động như mong đợi, các thực thể phải là ____3_______5 như được mô tả trong KT-28525. Chúng ta sẽ sử dụng plugin 14 của Kotlin cho mục đích đóvới lớp 9 7Hoặc với Maven 0 8Sau đó, chúng tôi tạo mô hình của mình bằng cách sử dụng Kotlin, cho phép khai báo đồng thời các thuộc tính và tham số hàm tạo 17 9Lưu ý rằng chúng tôi đang sử dụng tiện ích mở rộng 18 ở đây để cung cấp đối số mặc định cho tham số 19 của hàm tạo 20. Các tham số tùy chọn có giá trị mặc định được xác định ở vị trí cuối cùng để có thể bỏ qua chúng khi sử dụng đối số vị trí (Kotlin cũng hỗ trợ ). Lưu ý rằng trong Kotlin, không có gì lạ khi nhóm các khai báo lớp ngắn gọn trong cùng một tệpỞ đây chúng tôi không sử dụng các lớp 21 với các thuộc tính 8 vì JPA không được thiết kế để hoạt động với các lớp bất biến hoặc các phương thức được tạo tự động bởi lớp 21. Nếu bạn đang sử dụng hương vị Spring Data khác, hầu hết chúng được thiết kế để hỗ trợ các cấu trúc như vậy, vì vậy bạn nên sử dụng các lớp như 24 khi sử dụng Spring Data MongoDB, Spring Data JDBC, v.v.Mặc dù Spring Data JPA cho phép sử dụng ID tự nhiên (có thể là thuộc tính 25 trong lớp 26) thông qua , nhưng nó không phù hợp với Kotlin do KT-6653, đó là lý do tại sao bạn nên luôn sử dụng các thực thể được tạo Chúng tôi cũng khai báo kho lưu trữ Spring Data JPA của chúng tôi như sau 28 0Và chúng tôi viết các bài kiểm tra JPA để kiểm tra xem các trường hợp sử dụng cơ bản có hoạt động như mong đợi hay không 29 1Ở đây, chúng tôi sử dụng tiện ích mở rộng 30 của Kotlin được cung cấp theo mặc định với Dữ liệu mùa xuân, đây là một biến thể không thể vô hiệu hóa của 2 dựa trên 32. Đọc Null tuyệt vời là bạn của bạn, không phải là một bài đăng trên blog sai lầm để biết thêm chi tiếtTriển khai công cụ blogChúng tôi cập nhật các mẫu Mustache "blog" 4 2Và chúng tôi tạo một "bài viết" mới 34 3Chúng tôi cập nhật 35 để hiển thị các trang blog và bài báo với ngày được định dạng. Các tham số hàm tạo của 36 và 37 sẽ được tự động nối dây vì 35 có một hàm tạo duy nhất (ẩn _______14_______39) 8 4Sau đó, chúng tôi thêm phần khởi tạo dữ liệu vào một lớp 41 mới 42 5Lưu ý việc sử dụng các tham số được đặt tên để làm cho mã dễ đọc hơn Và chúng tôi cũng cập nhật các bài kiểm tra tích hợp cho phù hợp 03 6Bắt đầu (hoặc khởi động lại) ứng dụng web và đi đến 7, bạn sẽ thấy danh sách các bài viết có liên kết có thể nhấp để xem một bài viết cụ thểHiển thị API HTTPBây giờ chúng tôi sẽ triển khai API HTTP thông qua bộ điều khiển chú thích 45 46 7Đối với các bài kiểm tra, thay vì kiểm tra tích hợp, chúng tôi sẽ tận dụng 47 và Mockk tương tự như Mockito nhưng phù hợp hơn với KotlinVì các chú thích 48 và 49 dành riêng cho Mockito, nên chúng tôi sẽ tận dụng SpringMockK cung cấp các chú thích tương tự 50 và 51 cho Mockkvới lớp 9 8Hoặc với Maven 0 9 54 0 55 cần được thoát trong chuỗi vì nó được sử dụng để nội suy chuỗiThuộc tính Cấu hìnhTrong Kotlin, cách được đề xuất để quản lý thuộc tính ứng dụng của bạn là sử dụng thuộc tính chỉ đọc 56 1Sau đó, chúng tôi kích hoạt nó ở cấp độ 57 2 2Để tạo để IDE của bạn nhận ra các thuộc tính tùy chỉnh này, kapt phải được định cấu hình với phụ thuộc 59 như sau 9 3Lưu ý rằng một số tính năng (chẳng hạn như phát hiện giá trị mặc định hoặc các mục không dùng nữa) không hoạt động do những hạn chế trong mô hình mà kapt cung cấp. Ngoài ra, việc xử lý chú thích chưa được hỗ trợ với Maven do KT-18022, xem phần khởi tạo #438 để biết thêm chi tiết Trong IntelliJ IDEA
Giờ đây, các thuộc tính tùy chỉnh của bạn sẽ được nhận dạng khi chỉnh sửa 62 (tự động hoàn thành, xác thực, v.v. ) 2 4Chỉnh sửa mẫu và bộ điều khiển cho phù hợp 4 5 8 6Khởi động lại ứng dụng web, làm mới 7, bạn sẽ thấy biểu ngữ trên trang chủ blogPhần kết luậnBây giờ chúng ta đã hoàn thành việc xây dựng ứng dụng blog Kotlin mẫu này. Mã nguồn có sẵn trên Github. Bạn cũng có thể xem tài liệu tham khảo Spring Boot nếu bạn cần thêm chi tiết về các tính năng cụ thể |