Khái niệm, định nghĩa Spring Framework là gì?

Spring Framework là một bộ khung ứng dụng và bộ chứa đảo ngược điều khiển cho nền tảng Java.

Chức năng tính của bộ khung này có thể áp dụng cho bất kỳ ứng dụng Java nào, tuy vậy, nhiều bản mở rộng dành cho việc xây dựng ứng dụng nền web cũng được phát triển trên nền tảng Java EE. Tuy bộ khung không ấn định lên một cụ thể nào, Spring Framework đã trở nên phổ biến trong cộng đồng Java như một phương án song hành, thay thế, hoặc thậm chí bổ sung cho mô hình Enterprise JavaBeans (EJB). Đây là bộ khung mã nguồn mở.

Spring Framework cung cấp các giải pháp cho nhiều thách thức kỹ thuật mà các nhà phát triển phần mềm Java và các tổ chức muốn tạo ứng dụng dựa trên nền tảng Java phải đối mặt với Java platform. Bởi vì số lượng lớn chức năng của Spring Framework, việc phân loại những bộ phận cơ bản kiến tạo nên bộ khung là một việc rất khó. Spring Framework không chỉ được liên kết riêng biệt với Java Enterprise platform mặc dù sự tích hợp sâu của Spring trong Java EE là một yếu tố quan trọng cho sự phổ dụng, nổi tiếng của nó.

Có lẽ Spring Framework nổi tiếng nhất với sự cung cấp một cách hiệu quả các tính năng cần thiết để tạo ra các ứng dụng thương mại phức tạp, vượt lên khỏi các mô hình lập trình từng chiếm vị trí ưu thế trong lịch sử ngành công nghiệp phần mềm. Tiếp theo, nó cũng được ghi nhận về việc đưa các chức năng vốn ít được quen biết vào thực tế, có khi còn vượt cả ra bên ngoài nền tảng Java nữa.

Thành quả của việc này là nó đã tạo nên một bộ khung, cung cấp một mô hình nhất quán và làm cho nó có thể áp dụng vào hầu hết các loại ứng dụng được tạo trên nền tảng Java ngày nay. Bộ khung Spring được coi như thực thi một cách làm việc dựa trên những thói quen thực hành tốt nhất và những tiêu chuẩn công nghiệp, và đồng thời tạo cơ hội cho những lĩnh vực trong Java sử dụng nó.

Lịch sử

Phần đầu tiên của Spring Framework ban đầu nguyên được Rod Johnson viết vào năm 2000, trong khi ông đang làm một chuyên viên cố vấn cho các khách hàng trong thị trường kinh tế tài chính tại Luân Đôn. Trong lúc đang viết quyển Expert One-on-one J2EE Design And Development (Programmer to programmer) (Thiết kế và kiến tạo Java EE – tương giao cá nhân một đối một chuyên ngành (lập trình viên với lập trình viên)), ông đã mở rộng thêm phần mã nguồn, hòng biểu đạt ý tưởng của mình về mối tương quan của các trình ứng dụng với những phần khác nhau của J2EE và cho rằng người ta có thể đơn giản hóa mối tương quan của chúng, và mối liên hệ ấy có thể trở nên cố định, bất biến hơn là những gì mà các lập trình viên và các công ty vốn quen sử dụng tại thời điểm đó.

Tính năng chính

  • Bao gồm bộ quản lý cài đặt rất có hiệu lực dựa trên JavaBeans, áp dụng lý thuyết đảo ngược quyền khống chế (IoC) làm cho việc mắc nối các chương trình ứng dụng trở nên nhanh chóng và dễ dàng hơn. Việc sử dụng (IoC) trong khung hình Spring Framework còn được ám chỉ đến với cái tên Dependency Injection (DI) (Nghĩa đen: bơm hay tiếp thành phần phụ thuộc, từ bên ngoài vào, lúc cần thiết, thay vì phải tự tạo từ bên trong). Nguyên lý của IoC sử dụng trong Spring Framework là một kỹ thuật nhằm ngoại biên hóa (externalize) việc kiến tạo và quản lý những thành phần phụ thuộc. Lấy ví dụ trường hợp lớp “Foo” phụ thuộc vào một trường hợp cá biệt của lớp “Bar” để thi hình một nhiệm vụ nào đấy. Theo phương pháp cổ truyền, “Foo” phải tự kiến tạo trường hợp cá biệt của lớp “Bar”, dùng hành động “new”, hoặc phải tiếp nhận trường hợp cá biệt của lớp này từ một lớp chế xuất nào đấy (factory class). Nếu sử dụng tiếp cận của IoC thì một tiến trình ngoại biên sẽ phải cung cấp trường hợp của “Bar” (hoặc một tiểu lớp của nó) cho “Foo” trong thời gian chạy (runtime). Đây chính là nguyên nhân tại sao “DI” là một thành ngữ diễn tả tính năng của Spring Framework rõ hơn “IoC”.
  • Bao gồm một mẫu hình chế xuất trừu tượng (abstract factory pattern) Enterprise Java Beans (EJB) nòng cốt, có thể sử dụng trong bất cứ môi trường nào, từ những khung chứa (containers) applet cho đến Java EE.
  • Một lớp trừu tượng chung quản lý giao dịch cơ sở dữ liệu (database transaction), cho phép các bộ phận quản lý giao dịch được bổ trợ theo lối lắp ráp (pluggable), và tạo điều kiện thuận lợi cho việc phân định danh giới các giao dịch (demarcate transactions) mà không cần phải xử lý với những vấn đề ở tầng dưới (low-level issues).
  • Bao gồm một số các chiến lược phổ thông đã được cài sẵn bên trong (Built-in generic strategies) dành cho JTA và một đơn thể nguồn dữ liệu JDBC (DataSource). Đối lập với những giao dịch do khung chứa quản lý (Container-Managed Transactions – CMT) đơn thuần trong JTA hoặc EJB, hỗ trợ giao dịch trong bộ khung Spring không đòi hỏi môi trường Java EE.
  • Tầng liên nối với cơ sở dữ liệu (JDBC abstraction layer ) cung cấp một cơ chế tầng cấp đầy ý nghĩa đối với những ngoại lệ (exception hierarchy) (không còn phải dựa vào việc nắn bóp mã nguồn của nhà sản xuất phần mềm như đối với SQLException nữa), đơn giản hóa việc xử lý lỗi, và cũng đồng thời thuyên giảm số lượng dòng lệnh mà lập trình viên cần phải viết. Lập trình viên sẽ không bao giờ phải viết khối ‘finally’ trong các dòng mã sử dụng JDBC nữa.
  • Tích hợp với Hibernate, JDO và iBATIS SQL Maps: trên phương diện cầm dữ tài nguyên (resource holders), hỗ trợ phần thực thi DAO (Data Access Object – Đối tượng truy cập dữ liệu), và các chiến lược giao dịch (transaction strategies). Đứng hàng đầu trong việc hỗ trợ Hibernate với rất nhiều tính năng IoC tiện dụng, giải quyết nhiều nan đề trong việc tích hợp với Hibernate. Tất cả những tính năng này đều phục tùng cơ chế tầng cấp giao dịch chung cùng tầng cấp ngoại lệ DAO của Spring.
  • Khung hình mô hình-giao diện-điều khiển (Model-view-controller, hay MVC) linh hoạt dành cho ứng dụng mạng (web application), được gây dựng trên tính năng nền tảng của Spring. Các nhà xây dựng phần mềm (lập trình viên) có quyền khống chế cao độ trong khung hình này thông qua những giao diện chiến lược (strategy interfaces), đồng thời điều tiết với những kỹ thuật đa giao diện (multiple view technologies) như JSP, FreeMarker, Velocity, Tiles, iText, và POI. Nên nhớ là Tầng trung gian của Spring có thể dễ dàng kết hợp với một tầng mạng sử dụng bất cứ một khung hình MVC mạng nào đó (web MVC framework), như Struts, WebWork, hoặc Tapestry.
  • Khung hình lập trình định dạng (Aspect-oriented programming – hay AOP) nhằm cung cấp các dịch vụ như dịch cụ quản lý giao dịch (transaction management). AOP cung cấp khả năng thực thi lôgic đan kết (crosscutting logic) – tức những lôgic tác động đến rất nhiều phần của chương trình ứng dụng – tại cùng một chỗ (nhóm lại) và để cho lôgic ấy áp dụng xuyên suốt chương trình ứng dụng của mình một cách tự động.

Vì những khó khăn trong việc kiến lập một cấu trúc mạch lạc để thiết kế phần mô hình (Model part) trong chương trình ứng dụng, khi áp dụng mô hình MVC (design pattern) (ví như Struts), khả năng Spring tạo điều kiện cho người sử dụng làm việc một cách dễ dàng có nghĩa là các nhà xây dựng có thể nhanh chóng điều chỉnh lại những tiếp cận không thành quả của mình để lợi dụng tầng lớp JDBC trừu tượng của Spring Framework.