Các thuật ngữ quan trọng trong Spring Framework

Trong bài viết này, Stanford - Dạy kinh nghiệm lập trình sẽ giúp các bạn mới học lập trình java web hiểu được các thuật ngữ, khái niệm quan trọng trong Spring Framework.

Spring là gì ?

Spring là một framework phát triển các ứng dụng Java được sử dụng bởi hàng triệu lập trình viên. Nó giúp tạo các ứng dụng có hiệu năng cao, dễ kiểm thử, sử dụng lại code…

  • Spring nhẹ, kích thước nhỏ, version cơ bản chỉ khoảng 2MB
  • Spring là một mã nguồn mở, được phát triển, chia sẻ và có cộng đồng người dùng rất lơn.
  • Spring Framework được xây dựng dựa trên 2 nguyên tắc design chính là: Dependency Injection và Aspect Oriented Programming.
  • Spring có thể được sử dụng để phát triển Java Desktop, ứng dụng mobile, Java Web.

Mục tiêu chính của Spring là giúp phát triển các ứng dụng J2EE một cách dễ dàng hơn dựa trên mô hình sử dụng POJO (Plain Old Java Object).

Ưu điểm khi sử dụng Spring Framework

Spring cho phép lập trình viên java sử dụng POJOs. Việc sử dụng POJOs giúp bạn không phải làm việc với EJB, ứng dụng, các luồng chạy, cấu hình… đơn giản hơn rất nhiều.
Spring được tổ chức theo kiểu module. Số lượng các gói và các lớp khá nhiều, nhưng bạn chỉ cần quan tâm đến những gì bạn cần và không cần quan tâm đến phần còn lại.

Spring hỗ trợ sử dụng khá nhiều công nghệ như ORM Framework, các logging framework, JEE, các thư viện tạo lịch trình (Quartz và JDK timer)…Module Web của Spring được thiết kế theo mô hình MVC nên nó cung cấp đầy đủ các tính năng giúp thay thế các web framework khác như Struts.

Các thuật ngữ quan trọng trong Spring Framework

Spring Bean: Spring Bean là các object trong Spring Framework, được khởi tạo thông qua Spring Container. Bất kỳ class Java POJO nào cũng có thể là Spring Bean nếu nó được cấu hình và khởi tạo thông qua container bằng việc cung cấp các thông tin cấu hình (các file config .xml, .properties..)

Các Bean Scopes trong Spring: Có 6 scope được định nghĩa cho Spring Bean:

  • Singleton: Chỉ duy nhất một thể hiện của bean sẽ được tạo cho mỗi container. Đây là scope mặc định cho spring bean. Khi sử dụng scope này cần chắc chắn rằng các bean không có các biến/thuộc tính được share.
  • Prototype: Một thể hiện của bean sẽ được tạo cho mỗi lần được yêu cầu(request)
  • Request: giống với prototype scope, tuy nhiên nó dùng cho ứng dụng web, một thể hiện của bean sẽ được tạo cho mỗi HTTP request.
  • Session (dành cho web): Mỗi thể hiện của bean sẽ được tạo cho mỗi HTTP Session
  • Application (dành cho web): Với scope này, mỗi một ServletContext sẽ có một Bean instance được tạo ra.
  • Websocket (dành cho web): Mỗi một Socket kết nối đến server sẽ có một bean instance được tạo ra.

Dependency Injection (DI): Dependency Inject là 1 kỹ thuật, 1 design pattern cho phép xóa bỏ sự phụ thuộc hard-code và làm cho ứng dụng của bạn dễ mở rộng và bảo trì hơn.
Trong Spring có 2 cách thực hiện Injection Dependency là: 

  • Hàm khởi tạo (Constructor)
  • Sử dụng setter (Setter method)

IoC(Inversion of Control): Đảo ngược điều khiển, nó giúp làm thay đổi luồng điều khiển của chương trình một cách linh hoạt.
Spring IoC: IoC Container là thành phần thực hiện IoC.
Trong Spring, Spring Container (IoC Container) sẽ tạo các đối tượng, lắp rắp chúng lại với nhau, cấu hình các đối tượng và quản lý vòng đời của chúng từ lúc tạo ra cho đến lúc bị hủy.

Spring container sử dụng DI để quản lý các thành phần, đối tượng để tạo nên 1 ứng dụng. Các thành phần, đối tượng này gọi là Spring Bean. Để tạo đối tượng, cấu hình, lắp rắp chúng, Spring Container sẽ đọc thông tin từ các file xml và thực thi chúng.

Để hiểu rõ hơn về IoC và Dependency Injection chúng ta cùng tìm hiểu qua ví dụ sau:

Xây dựng một interface và 2 lớp triển khai từ interface này với nội dung như dưới đây:

public interface HelloWorld {
    void sayHello();
}
 
public class SpringHelloWorld implements HelloWorld{
    @Override
    public void sayHello() {
        System.out.println("Spring say hello !");
    }
}
 
public class HibernateHelloWorld implements HelloWorld{
    @Override
    public void sayHello() {
        System.out.println("Hibernate say hello !");
    }
}
Sau đó xây dựng một lớp xử lý nghiệp vụ như sau:

public class HelloWorldService {
    private HelloWorld helloWorld;
    private HelloWorldService() {
        //Khởi tạo 1 đối tượng
        helloWorld = new SpringHelloWorld();
    }
}
Trong ví dụ trên HelloWorldService đang điều khiển "object creation" của HelloWorld. Tại sao chúng ta không chuyển việc tạo HelloWorld cho một bên thứ 3 xử lý thay vì làm ở HelloWorldService. Chúng ta có khái niệm "inversion of control" nghĩa là "Sự đảo ngược điều khiển" (IoC). Và IoC Container sẽ đóng vai trò người quản lý việc tạo ra cả HelloWorldService lẫn HelloWorld.


IoC Container tạo ra đối tượng HelloWorldService và đối tượng HelloWorld sau đó pass HelloWorld vào HelloWorldService thông qua setter. Việc IoC Container đang làm chính là "tiêm sự phụ thuộc" (Dependency Injection) vào HelloWorldService. Sự phụ thuộc ở đây nghĩa là sự phụ thuộc giữa các object : HelloWorldService và HelloWorld.

Hy vọng qua bài viết này sẽ giúp các bạn hiểu rõ hơn về Spring Framework cũng như các thuật ngữ quan trọng trong Spring Framework để sử dụng hiệu quả trong lập trình java web với công nghệ Spring MVC, Spring Boot. 

Bên cạnh đó nếu bạn đang muốn được đào tạo bài bản từ cơ bản đến nâng cao có thể tham gia ngay khóa học lập trình java fullstack cùng chuyên gia giàu kinh nghiệm Stanford tại đây: http://bit.ly/2SLPYFF và nhận ưu đãi hấp dẫn của Stanford trong thời gian này. Bạn có thể gọi theo hotline: 0963 723 236 - 0866 586 366 để được gọi lại tư vấn trực tiếp nhé.

=============================
☎ STANFORD – ĐÀO TẠO VÀ PHÁT TRIỂN CÔNG NGHỆ
Hotline: 0963 723 236 - 0866 586 366
Website: https://stanford.com.vn
Facebook: http://bit.ly/2FN0TYb
Youtube: http://bit.ly/2TkKT7I

Tags: spring framework, tìm hiểu ioc, dependency injection