Spring framework và hệ sinh thái của nó có lẽ đã không còn xa lạ với các lập trình viên Java. Trải qua quá trình phát triển từ những năm 2005, cho đến những ngày đầu năm 2018 này, Spring framework đi cùng với sự trưởng thành của ngôn ngữ Java và sắp sửa cho ra đời phiên bản chính thức thứ 5 của nó. Phiên bản số 5 là một sự thay đổi lớn (major change) từ phiên bản trước đó là phiên bản số 4 được ra mắt từ năm 2013, phiên bản 5 hứa hẹn sẽ mang đến những công cụ thật hữu ích và mạnh mẽ cho các lập trình viên khi phát triển ứng dụng. Bài viết này sẽ giới thiệu đến bạn đọc những thay đổi và những tính năng mới đang hiện diện trong bản thân Spring framework 5.
Sau đây là tóm tắt một vài những thay đổi cũng như cải thiện mới của Spring framework 5
- Các cập nhật liên quan đến các phiên bản Java mới nhất
Toàn bộ code của Spring framework 5 đã được viết lại để có thể ứng dụng được các tính năng mới nhất của phiên bản Java 8. Chính vì thế mà để có thể chạy được ứng dụng viết bằng Spring framework 5, thì đòi hỏi môi trường ứng dụng phải cài đặt Java với phiên bản 8 là ít nhất. Xin được nói thêm một chút nũa về quá trình phát triển của Spring framework 5, ban đầu Spring framework 5 được phát triển với ý định sẽ ra mắt cùng với phiên bản Java 9.
Phiên bản Java 9 cũng được mong chờ là sẽ ra mắt vào những ngày cuối năm 2017 này, nhưng vì một số lý do nào đó mà Java 9 bị trễ hẹn và thế là Spring framework 5 đành ra mắt trước và tương thích với Java 8. Tuy nhiên có lẽ đến khi mà Java 9 được ra mắt, thì Spring framework 5 cũng hoàn toàn sẵn sàng để có thể tích hợp và ứng dụng những sự thay đổi mới nhất từ phiên bản Java đang được mong chờ này.
Cùng với việc nâng cấp rất nhiều trong phần lõi thì Spring 5 rất sang chảnh khi chỉ hỗ trợ tích hợp với các phiên bản mới nhất của các thư viện đi kèm với nó. Có thể lấy ví dụ như Hibernate phải là từ phiên bản 5.x trở lên, hay như Spring Boot phải là bản 2.x trở lên, rồi Apache Tiles phải là bản 3.x trở lên. Tiếp đến là có một cơ số các thư viện sẽ không được tích hợp nữa, ví dụ như Spring Cache giờ sẽ không chấp nhận tích hợp với Google Guava cache mà thay vào đó là Caffeine cache.
- Spring JCL – Cầu nối mới cho logging API
Bên ngoài các thư hiện cầu nối cho logging API truyền thống như slf4j, common-logging… thì giờ đây các lập trình viên Java khi làm việc với Spring framework 5 sẽ có thêm một sự lựa chọn khác là Spring JCL. Giống như các cầu nối khác, Spring JCL cũng có khả năng để có thể tích hợp với các Logging framework nổi tiếng như là Log4j hay JUL.
- Tăng tốc thời gian bật ứng dụng với file index (META-INF/spring.components )
Bình thường các ứng dụng có sử dụng Spring thì bao giờ cũng mất một khoảng thời gian lúc đầu khi bật lên cho việc khởi tạo Spring container và các Spring components (gọi chung là các Beans). Trong quá trình này, việc nhận diện một lớp là một Spring component hay không thường là được thực hiện qua việc quét (scanning) classpath và nhận diện dựa vào các Java Annotation (@Component, @Controller…).
Trong phiên bản Spring framework 5 này, các lập trình viên sẽ có thể khai báo các component trong file META-INF/spring.components và dựa vào đó thì Spring có thể biết được ngay đâu là những component sẽ cần khởi tạo trong container của nó thay vì phải quét toàn bộ classpath như trước. Việc này có thể rút ngắn quãng thời gian khởi tạo các component ban đầu hay nói cách khác có thể giúp giảm thời gian bật ứng dụng lên.
Tuy nhiên thì việc rút ngắn quãng thời gian này đôi khi không mang lại nhiều ý nghĩa lắm. Nó chỉ đúng và có ý nghĩa trong trường hợp dự án là các dự án lớn mà ở đó có số lượng các lớp (class) là rất nhiều. Vậy nếu dự án của bạn mà đang có nhiều hơn 200 lớp thì bạn nên sử dụng tính năng mới này của Spring framework 5, cho dù chỉ tiết kiệm được vài chục giây mỗi lần bật ứng dụng đi chăng nữa, thì điều này cũng rất có ý nghĩa trong quá trình phát triển dự án khi mà chúng ta cứ phải tắt bật ứng dụng nhiều lần để cập nhật code mới. Còn nếu dự án của bạn nhỏ ( ít hơn 200 lớp) thì mọi thứ tùy thuộc vào bạn.
- Spring WebFlux – web framework mới hỗ trợ mô hình lập trình Reactive (Reactive Programming)
Nhắc đến Spring web framework, chắc hẳn không ai là không biết đến Spring MVC với rất nhiều tính năng mạnh mẽ và thuận tiện cho lập trình viên. Được xây dựng dựa trên chuẩn Servlet, Spring MVC đã làm mưa làm gió ở phía server đi cùng với các Servlet container như Tomcat, Jetty, JBoss…tạo nên các ứng dụng Web động cũng như RESTful API. Tuy nhiên đến thời điểm này, Spring MVC sẽ không còn là đứa con cưng duy nhất về mảng web nữa khi người anh em WebFlux của nó được ra đời ở Spring thế hệ thứ 5 với nhiều cải tiến mới.
Vậy những điều mới mẻ của Spring WebFlux so với Spring MVC là gì, mình có thể điểm qua một số ý như sau:
Thứ nhất, Spring WebFlux theo đuổi mô hình lập trình reactive là mô hình lập trình hỗ trợ Non-Blocking. Với kiến trúc event-loop, thì mô hình Non-Blocking giúp sử dụng tài nguyên máy một cách tối ưu nhất, so với mô hình Blocking, để có thể phục vụ cùng một số lượng HTTP request tại một thời điểm, số lượng Thread được tạo ra trên Server sẽ ít hơn nhiều và vì thế cũng đồng nghĩa khi mà số lượng Thread nhiều hơn ta có thể phục vụ nhiều request hơn. Đây là một trong những điểm khác biệt căn bản của Spring WebFlux so với Spring MVC. Spring MVC tuân theo chuẩn Servlet vẫn là mô hình Blocking truyền thống, mỗi một HTTP request sẽ được phục vụ bởi một Thread trên server, và các dòng lệnh chạy trong thread này sẽ phải tuần tự thực hiện và đương nhiên phải chờ nhau dẫn đến block khi một dòng lệnh nào đó chiếm quá nhiều thời gian cho việc xử lý (ví dụ các thao tác liên quan đến IO hay Network).
Mặc dù WebFlux ra đời với những tính năng hiện đại nhưng Spring MVC vẫn được hỗ trợ đầy đủ ở phiên bản Spring framework 5 này. Thậm chí Spring WebFlux còn hỗ trợ tương thích ngược với cú pháp của Spring MVC để sao cho các lập trình viên có thể thay đổi dễ dàng từ Spring MVC sang Spring WebFlux mà không phải thay đổi code nhiều. Đó là khi làm việc với WebFlux, ta có thể viết ứng dụng dựa vào các Annotation (@Controller … ), tất cả mọi thứ đều rất giống như trong Spring MVC. Ngoài cách viết hướng đối tượng như ở Spring MVC ra, thì WebFlux còn hỗ trợ để viết chương trình theo phong cách lập trình hàm (functional programming) dựa vào biểu thức lambda (->) có từ Java 8. Tất cả đều rất linh hoạt, tùy thuộc sở thích viết code của mỗi lập trình viên dựa trên một cái nền rất chung là Spring WebFlux.
Thứ hai, Spring WebFlux không phụ thuộc vào Servlet API như Spring MVC. Nếu như Spring MVC tuân theo chuẩn (specification) Servlet, thì sang đến WebFlux nó được thay thế bằng chuẩn HTTP/Reactive Stream. Nếu như Spring MVC cần các Servlet container để implement chuẩn Servlet, thì WebFlux implement chuẩn HTTP/Reactive Stream bằng Reactor. Và cuối cùng nếu như Spring MVC cần có Servlet container như Tomcat, Jetty, JBoss…để chạy các ứng dụng của nó, thì Spring WebFlux chỉ cần một Http server đơn thuần như Netty là đã có thể chạy được rồi.
- Hỗ trợ ngôn ngữ lập trình mới Kotlin
Nhắc đến Spring framework, chắc hẳn ai trong chúng ta cũng liên tưởng tới Java, tuy nhiên Spring framework 5 không chỉ hỗ trợ Java mà còn hỗ trợ thêm ngôn ngữ lập trình mới có tên là Kotlin. Kotlin là ngôn ngữ lập trình hướng đối tượng và có hỗ trợ cả lập trình hàm, và cũng là một ngôn ngữ của JVM giống như Java, Scala hay Groovy. Kotlin do JetBrains (là công ty làm ra các IDE tuyệt vời như IntelliJ, Webstorm, PHPStorm…) tạo ra với mục đích là có một ngôn ngữ mới với cú pháp ngắn gọn, dễ nhìn hơn sau khi rút kinh nghiệm từ các ngôn ngữ đàn anh như Java.
Được sự hậu thuẫn của Google sau khi tranh cãi và kiện tụng với Oracle về bản quyền Java API trên Android, giờ đây Kotlin đang là một trong những ngôn ngữ đáng để các lập trình viên Android để mắt tới vì tương lai nó được dự đoán là sẽ thay thế và làm giảm dần sức ảnh hưởng của ngôn ngữ Java vốn đang được Oracle nắm giữ. Và điểm mạnh của Kotlin có lẽ không chỉ nằm ở sự tinh gọn trong cú pháp, nó còn hỗ trợ để tương thích với các thư viện JVM hiện hành, khiến thiên hạ bớt lo lắng, đỡ băn khoăn và không cảm thấy… tiếc của khi phải bỏ toàn bộ những công sức đã làm từ ngôn ngữ cũ để chuyển sang một ngôn ngữ mới.
Như vậy là chúng ta đã cùng nhau lướt qua một vài những thay đổi và những cái mới trong Spring framework 5. Tất cả những gì mà chúng ta có thể làm bây giờ là tranh thủ nạp kiến thức mới để tránh bỡ ngỡ quá nhiều sau này. Chúc các bạn thành công.
Nguồn: Sưu tầm