Spring Framework

Spring Framework là một framework ứ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 framework 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 framework không ấn định lên một mô hình lập trình 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à framework mã nguồn mở.
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 đó.
Trước đây, vào năm 2001, những mô hình lập trình cho các trình ứng dụng cho mạng WEB được đại đa số sử dụng đều do Java Servlet API và Enterprise JavaBean cung cấp. Cả hai đều là đặc tả do Sun Microsystems kiến tạo với sự cộng tác của các nhà buôn bán phần mềm và các bên quan tâm, và chúng rất được mến chuộng trong cộng đồng Java. Những trình ứng dụng không dùng cho mạng WEB như các ứng dụng trình khách ("client-based application") hay các ứng dụng tác vụ ("batch application") đều có thể sử dụng các công cụ từ mã nguồn mở, các công cụ trên thị trường hoặc từ các dự án khác là những cái cung cấp những đặc trưng yêu cầu.
Rod Johnson được ghi công là người thiết lập framework, dựa trên những thói quen hành nghề được công chúng chấp nhận là những phương pháp tốt nhất, và tạo cơ hội cho chúng có thể được sử dụng trong tất cả các loại hình chương trình ứng dụng, không chỉ cho các trình ứng dụng cho mạng WEB riêng mà thôi. Ý tưởng này còn được biểu lộ trong cuốn sách của ông và, sau khi được độc giả yêu cầu, ông còn cho xuất bản kèm với mã nguồn với giấy phép mã nguồn mở nữa.
Một nhóm nhỏ các nhà phát triển đang tiếp tục mở rộng framework này và một dự án đã được thành lập tại Sourceforge vào tháng 2 năm 2003. Sau khi phát triển trền nền tảng ban đầu hơn một năm họ đã phát hành phiên bản đầu tiên (1.0) vào tháng 3 năm 2004. Sau khi phát hành nó đã nhận được nhiều sự quan tâm của cộng đồng Java.
Tuy nhiên, Spring Framework cũng chịu nhiều chỉ trích nặng nề năm 2004 và vẫn còn là chủ điểm của những cuộc tranh cãi đôi khi nóng bỏng. Vào thời điểm ra đời phiên bản đầu tiên nhiều lập trình viên cùng một số thành viên tiên phong thấy nhận thấy rằng Spring Framework là một phương hướng mới để thoát khỏi mô hình lập trình truyền thống. Điều này đặc biệt đúng đối với Enterprise JavaBean. Một trong những mục tiêu thiết kế Spring Framework là làm cho nó dễ dàng tích hợp với tiêu chuấn J2EE và các bộ công cụ có sẵn trên thị trường hiện nay. Ảnh hưởng của điều này là nó hầu như góp phần xóa bỏ nhu cầu phải định nghĩa các chức năng đặc trưng trên một bản tài liệu đặc tả chính thức do hội đồng quản lý, cái mà một số người đã từng phê phán.
Spring Framework đã làm cho những kỹ thuật vốn không được biết đến mấy trở nên những kỹ thuật được mọi người ưa chuộng trong một thời gian ngắn ngủi. Một trong những kỹ thuật nổi tiếng hơn cả là kỹ thuật đảo ngược quyền điều khiển ("Inversion of Control", IoC). Nội trong 2004, Spring Framework được rất nhiều người hưởng ứng và làm theo và cũng do tự chính nó cống hiến khung hình lập trình hướng khía cạnh ("aspect-oriented programming") (AOP). Spring Framework đã tạo cơ hội cho mẫu hình lập trình này trở nên được ưa thích trong cộng đồng Java.
Năm 2005 cho thấy mức độ hưởng ứng nâng cao hơn những năm trước, nguyên do cũng vì những xuất bản mới được ra với những cột mốc đáng kể và những tính năng mới được thêm vào. Diễn đàn Spring ("Spring Forum") ra đời cuối năm 2004 cũng góp phần không nhỏ trong việc nâng cao tính phổ biến của framework hình, và từ đó đến nay đã sinh trưởng trở thành một nguồn thông tin quan trọng, giúp đỡ cho người sử dụng.
Trong cùng năm đó, những người phát triển Spring Framework khởi thủy công ty riêng của họ để hỗ trợ về mặt thương mại và đáng kể hơn cả là sự bắt tay cộng tác với BEA . Vào tháng 12 năm 2005, hội thảo đầu tiên về Spring Framework đã được tổ chức tại Miami, Florida thu hút 300 nhà phát triển trong 3 ngày, và tiếp theo đó cuộc hội thảo ở Antwerp vào tháng 6 năm 2006, thu hút hơn 400 người.
Lịch sử phiên bản.
Phiên bản đầu tiên của Spring được viết bởi Rod Johnson, cùng lúc đó ông cũng cho ra cuốn sách "Expert One-on-One J2EE Design and Development" vào tháng 10 năm 2002. Ban đầu, framework được phát hành dưới Giấy phép Apache 2.0 vào tháng 06 2003. Cột mốc đầu tiên, bản 1.0, được phát hành tháng 03 năm 2004, và lần lượt các mốc phát hành kế tiếp vào tháng 09 năm 2004 và tháng 03 năm 2005. Phiên bản Spring 1.2.6 nhận Giải năng suất Jolt (Jolt Productivity award) và một Giải Cải tiến JAX (JAX Innovation Award) vào năm 2006. Spring 2.0 was released in October 2006, Spring 2.5 in November 2007, Spring 3.0 in December 2009, Spring 3.1 in December 2011, and Spring 3.2.5 in November 2013. Spring Framework 4.0 được phát hành vào tháng 12 năm 2013. Cải tiến đáng chú ý của phiên bản này gồm có hỗ trợ Java SE 8, Groovy 2, một số phần của Java EE7, và WebSocket.
Spring Framework 4.2.0 được phát hành ngày 31 tháng 07 năm 2015 và ngay sau đó được nâng cấp lên phiên bản 4.2.1, được phát hành ngày 01 tháng 09 cùng năm. Phiên bản này được mô tả là "tương thích với Java 6, 7 và 8, chú trọng vào những cải tiến cốt lõi và tính năng web hiện đại".
Spring Framework 4.3 được phát hành ngày 10 tháng 06 năm 2016. Phiên bản 4.3.0.RC1 có hiệu lực. Nó "sẽ là thế hệ cuối cùng cho những yêu cầu của Spring 4 (Java 6+, Servlet 2.5+), chuẩn bị cho phiên bản mở rộng 4.3.x với thời gian hỗ trợ đến năm 2019".
Spring 5 được thông báo rằng sẽ dựng trên Reactive Streams tương thích với Reactor Core.
Tính năng chủ yếu.
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.
Giới thiệu.
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 framework 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 framework, 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. framework 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ó.
Các môđun.
Spring Framework được coi như là một tổ hợp của nhiều khung hình nhỏ, hay nói cách khác, nó là tổ hợp của khung hình trong khung hình. Đại bộ phận các khung hình này được thiết kế để hoạt động biệt lập với các khung hình khác, song lại tạo nên nhiều chức năng tốt hơn khi được phối hợp làm việc với nhau. Những khung hình này được phân loại theo các khối nền cơ bản mà những chương trình phần mềm phức tạp điển hình thường sử dụng:
Spring AOP module cũng đưa lập trình metadata vào trong Spring. Sử dụng cái này chúng ta có thể thêm annotation vào source code để hướng dẫn Spring nơi và làm thế nào để liên
hệ với aspect..
Khung chứa đảo ngược quyền khống chế.
Trọng tâm của Spring Framework là khung chứa đảo ngược quyền khống chế ("Inversion of Control"). Nó được sử dụng để cung cấp một phương pháp kiên định cài đặt và quản lý các đối tượng Java. Khung hình này còn được gọi là "BeanFactory" (Chủ thể chế xuất Bean), "ApplicationContext" (Ngữ cảnh của chương trình ứng dụng) và "khung chứa cốt lõi" ("Core container").
Khung chứa có rất nhiều trách nhiệm và nhiều điểm mở rộng, và chúng hầu hết đều được coi như là những hình thức của đảo ngược quyền khống chế, thế cho nên mới có cái tên như vậy. Những ví dụ bao gồm: việc kiến tạo đối tượng, cài đặt đối tượng, khởi động các phương pháp khởi tạo ("calling initialization methods") và truyền giao các đối tượng sang cho các đối tượng gọi lại đã đăng ký ("registered callback objects"). Tổ hợp của các chức năng trong khung chứa tạo nên chu kỳ của đối tượng và đây cũng chính là một trong những đặc trưng trọng yếu mà nó cung ứng.
Đối tượng do khung hình kiến tạo còn được gọi là "đối tượng đã quản" ("Managed Objects") hoặc chủ thể "Beans". Trong những trường hợp điển hình, khung hình được cài đặt bằng cách đọc các văn bản XML có chứa các "định nghĩa về chủ thể" ("Bean definitions"). Những bản định nghĩa này cung cấp các thông tin cần thiết để kiến tạo các đối tượng. Một khi các đối tượng đã được tạo dựng và cài đặt mà không có lỗi ("without raising error conditions") thì chúng sẵn sàng để sử dụng. Người ta có thể truy cập các đối tượng bằng các phương pháp truy vấn phần phụ thuộc ("Dependency lookup") hay DI ("Dependency injection").
"Truy vấn phần phụ thuộc" là một mẫu hình, trong đó một chủ thể ("caller") yêu cầu khung chứa đưa cho nó một đối tượng bằng một cái tên, hoặc một kiểu dữ liệu cụ thể ("specific type") nào đấy. DI là một mẫu hình mà trong đó khung chứa truyền giao các đối tượng cho nhau bằng tên của chúng, thông qua những phương pháp khởi tạo ("constructor"), các đặc tính ("properties") hoặc các phương pháp chế xuất ("factory methods" / "Factory method pattern").
Trong nhiều trường hợp, khi sử dụng những phần khác của Spring Framework, yêu cầu sử dụng khung chứa không nhất thiết là một việc bắt buộc, song việc không sử dụng khung hình Spring rất có thể sẽ làm cho việc cài đặt và cải biên chương trình ứng dụng khó khăn hơn. Khung hình Spring cung cấp một cơ chế nhất quán ổn định cho việc cài đặt và tích hợp các chương trình ứng dụng với hầu hết các môi trường Java, từ những ứng dụng dùng trong phạm vị nhỏ cho đến các ứng dụng kinh doanh trên phạm vi lớn.
Khung chứa có thể được cải biến trở thành một khung hình tương thích với EJB3 bằng cách sử dụng đề án Pitchfork. Bản thân đề án này không làm cho khung chứa hoàn toàn tương thích với đặc tả EJB3. Spring Framework bị một số chỉ trích cho rằng nó không tuân theo các tiêu chuẩn. Interface21 cho rằng việc tương thích với EJB3 không phải là một mục đích chính và tuyên bố rằng Spring Framework cùng khung chứa cho phép các mô hình lập trình có hiệu lực hơn sinh trưởng.