
Spring Framework là một trong những framework Java EE phổ biến nhất hiện nay. Trong bài viết này, chúng ta sẽ tìm hiểu về:
- Kiến trúc của Spring Framework
- Các thành phần cốt lõi trong Spring
- Các dự án thuộc hệ sinh thái Spring
Tôi đã xem biểu đồ Google Trends so sánh giữa Spring Framework, Servlet, JSP và JSF. Rõ ràng, Spring đang vượt xa các công nghệ Java EE còn lại.

Spring Framework – Google Trends
Spring Framework là gì?
Spring là một trong những framework phổ biến nhất dành cho nền tảng Java Enterprise Edition. Các lập trình viên trên toàn thế giới sử dụng Spring để phát triển những ứng dụng uy tín và chất lượng cao.
Spring Framework được thiết kế bởi Rod Johnson. Kể từ đó, Spring đã trở thành một công nghệ thay thế cho mô hình EJB trong thế giới Java. Bạn có thể xây dựng nhiều loại ứng dụng khác nhau bằng cách sử dụng Spring Framework.
Các khái niệm cốt lõi trong Spring: DI, IoC, AOP
Bạn sẽ không thể hiểu đầy đủ về Spring Framework nếu không nắm vững hai khái niệm cốt lõi là Dependency Injection (DI) và Inversion of Control (IoC). Trong đó, DI là một hình thức cụ thể của nguyên lý IoC.
- Inversion of Control là một nguyên lý trong lập trình hướng đối tượng, theo đó các đối tượng trong chương trình không phụ thuộc trực tiếp vào các hiện thực cụ thể của đối tượng khác, mà chỉ tương tác thông qua các dạng trừu tượng (interface) để phục vụ cho việc tương tác sau này.
- Dependency Injection là sự kết hợp của các mẫu thiết kế cấu trúc, trong đó mỗi chức năng của ứng dụng được đảm nhiệm bởi một đối tượng tương đối độc lập (service). Đối tượng này có thể cần sử dụng các đối tượng khác (dependency), vốn được biết đến thông qua các interface. Các dependency này được truyền (hoặc được cài đặt) vào service ngay tại thời điểm khởi tạo. Đây là tình huống mà ta đưa một thành phần của lớp này vào bên trong một lớp khác. Trong thực tế, DI được hiện thực thông qua việc truyền tham số vào constructor hoặc thông qua setter. Những thư viện triển khai phương pháp này còn được gọi là các IoC container.
- Lập trình hướng khía cạnh (Aspect-Oriented Programming – AOP) là một mô hình lập trình cho phép bạn tách biệt các chức năng cắt ngang trong ứng dụng. Những chức năng này xuất hiện ở nhiều điểm trong hệ thống và được gọi là các mối quan tâm cắt ngang (cross-cutting concerns), thường được tách riêng khỏi logic nghiệp vụ chính của ứng dụng. Trong OOP, đơn vị chính là lớp; còn trong AOP, đơn vị chính là aspect. DI giúp chia các lớp trong ứng dụng thành các mô-đun riêng biệt, còn AOP giúp tách biệt các chức năng cắt ngang ra khỏi các đối tượng mà chúng tác động đến.
Kiến trúc của Spring Framework
Spring Framework được chia thành nhiều mô-đun riêng biệt, cho phép bạn lựa chọn những phần phù hợp để sử dụng trong ứng dụng. Hình minh họa dưới đây cho thấy các mô-đun quan trọng trong kiến trúc của Spring Framework.

Hãy cùng tìm hiểu từng mô-đun trong hệ sinh thái Spring.
Các thành phần cốt lõi trong Spring Framework
Thành phần Core Container của Spring bao gồm bốn mô-đun: SpEL, Context, Core, và Beans. Mô tả của từng mô-đun như sau:
- Mô-đun SpEL cung cấp một ngôn ngữ biểu thức mạnh mẽ để thao tác đối tượng trong thời gian chạy.
- Mô-đun Context được xây dựng trên nền tảng Beans và Core, cho phép truy cập bất kỳ đối tượng nào đã được định nghĩa trong cấu hình. Thành phần chính trong mô-đun Context là interface ApplicationContext.
- Mô-đun Core cung cấp các thành phần cốt lõi của framework, bao gồm các thuộc tính của IoC và DI.
- Mô-đun Beans chịu trách nhiệm tạo và quản lý các Spring Bean – đơn vị cấu trúc của context trong ứng dụng.
Spring Framework Web
Lớp Web trong Spring Framework bao gồm các mô-đun: Web, Web-MVC, Web-Socket, Web-Portlet…
- Mô-đun Web cung cấp các chức năng như tải tệp xuống, tạo ứng dụng web, REST Web Service…
- Web-MVC chứa hiện thực Spring MVC dành cho các ứng dụng web.
- Web-Socket hỗ trợ giao tiếp giữa client và server thông qua giao thức Web-Socket trong các ứng dụng web.
- Web-Portlet cung cấp hiện thực MVC trong môi trường Portlet.
Spring Framework – Truy cập dữ liệu
Lớp Data Access/Integration trong Spring bao gồm các mô-đun: JDBC, ORM, OXM, JMS và Transactions.
- JDBC cung cấp một lớp trừu tượng, giúp lập trình viên không phải lặp lại các đoạn mã xử lý kết nối cơ sở dữ liệu một cách thủ công.
- Spring ORM tích hợp với các ORM phổ biến như Hibernate, JDO… là các hiện thực của JPA.
- Mô-đun OXM chịu trách nhiệm liên kết giữa Object/XML – như XMLBeans, JAXB…
- JMS (Java Messaging Service) chịu trách nhiệm tạo, gửi và nhận tin nhắn.
- Transactions hỗ trợ quản lý giao dịch cho các lớp hiện thực một số phương thức nhất định và cho các POJO.
Các mô-đun khác trong Spring
Spring còn bao gồm một số mô-đun quan trọng khác như AOP, Aspects, Instrumentation, Messaging và Test.
- AOP hiện thực lập trình hướng khía cạnh và cho phép sử dụng đầy đủ các tính năng của AOP.
- Mô-đun Aspects cung cấp tích hợp với AspectJ – một framework AOP toàn diện.
- Instrumentation hỗ trợ việc tác động lên class và class loader, được sử dụng trong các ứng dụng chạy trên server.
- Mô-đun Messaging hỗ trợ STOMP.
- Cuối cùng, mô-đun Test cung cấp khả năng kiểm thử với TestNG hoặc JUnit Framework.
Các tính năng của Spring 5
Spring 5 là một bản cập nhật lớn so với Spring 4, với nhiều tính năng nổi bật, bao gồm:
- Hỗ trợ Java 8, Java 9, Java EE 7, Java EE 8, Servlet 4.0, Bean Validation 2.0, và JPA 2.2 – cho thấy nỗ lực của Spring trong việc bắt kịp các công nghệ nền tảng quan trọng mới nhất.
- Cải tiến cơ chế ghi log thông qua mô-đun mới: spring-jcl.
- Hỗ trợ thao tác tệp sử dụng luồng NIO 2, từ đó nâng cao hiệu năng xử lý I/O.
- Tích hợp Reactor 3.1 (với Flux và Mono), cũng như hỗ trợ RxJava 1.3 và 2.1 làm kiểu trả về trong các phương thức controller của Spring MVC.
- Hỗ trợ Kotlin, Project Lombok, và JSON Binding API như những lựa chọn thay thế cho Jackson và GSON.
- Spring WebFlux – Spring chuyển mình sang mô hình lập trình phản ứng (Reactive).
- Hỗ trợ JUnit 5.
- Bổ sung khả năng lập trình hàm thông qua Kotlin.