CHƯƠNG 1: SPRING FRAMEWORK Spring là một framework giúp các nhà phát triển xây dựng những hệ thống và ứng dụng chạy trên JVM một cách đơn giản, tiện gọn, nhanh chóng và mềm dẻo. Sự ra đời của Spring Vào năm 2002, Spring Framework phát hành phiên bản đầu tiên bởi Rod Johnson. Việc xây dựng các ứng dụng doanh nghiệp trở nên đơn giản và dễ dàng hơn. Rod Johnson đã cho xuất bản một cuốn sách được phổ biến rộng rãi có nhan đề "J2EE Development without EJB".
Điều này đã cho Spring Framework rất nhiều động lực để thay thế EJB. Theo đà phát triển đó, Spring đã trở thành framework mã nguồn mở phổ biến nhất để xây dựng các ứng dụng doanh nghiệp. Cách tiếp cận thực tế ban đầu của Rod Johnson tiếp tục được phát triển và hướng tới một bộ công cụ hoàn chỉnh dành cho xây dựng các ứng dụng doanh nghiệp. Theo một số nguồn, trên 50% các ứng dụng web Java hiện nay đang sử dụng Spring.
Để ngăn chặn sự phức tạp trong phát triển các ứng dụng, Spring Framework thường dựa trên các quan điểm như sau: - Đơn giản hóa công việc phát triển thông qua việc sử dụng các POJO (Plain Old Java Object) - Nới lỏng ràng buộc giữa các thành phần thông qua việc sử dụng Dependency Injection - Giảm thiểu các mã boilerplate thông qua việc sử dụng template và aspect. Module Spring Spring Framework bao gồm các tính năng được tổ chức thành khoảng 20 mô-đun. Những mô-đun này được nhóm vào Core Container, Data Access/Integration, Web, AOP (Aspect Oriented Programming), Instrumentation, Messaging, and Test. 18 do an Hình 1.1: Tổng quan về Spring Framework Core Container Core Container bao gồm các mô-đun spring-core, spring-beans, spring-context, springcontext-support, and spring-expression (Spring Expression Language) modules.
Các mô-đun spring-core và spring-bean cung cấp các phần cơ bản của khung, bao gồm các tính năng IoC và Dependency Injection. The Context (spring-context) module xây dựng trên nền tảng vững chắc được cung cấp bởi các mô-đun Core và Beans. The Context module kế thừa các tính năng của nó từ mô-đun Beans. The Context module cũng hỗ trợ các tính năng Java EE như EJB, JMX và điều khiển từ xa cơ bản.
The Context module là tiêu điểm của mô-đun Context. Hỗ trợ spring-context cung cấp hỗ trợ cho việc tích hợp các thư viện chung của bên thứ ba vào bối cảnh ứng dụng Spring để lưu vào bộ đệm (EhCache, Guava, JCache), gửi thư (JavaMail), lên lịch (CommonJ, Quartz) và các công cụ mẫu (FreeMarker, JasperReports, Velocity). The Spring-expression module cung cấp ngôn ngữ mạnh mẽ để truy vấn và thao tác biểu đồ đối tượng khi chạy. Ngôn ngữ hỗ trợ cài đặt và nhận các giá trị thuộc tính, gán thuộc tính, gọi phương thức, truy cập nội dung của mảng 19 do an AOP và Instrumentation AOP và Thiết bị Mô-đun Spring-aop cung cấp triển khai lập trình hướng theo khía cạnh tuân thủ AOP Alliance, cho phép bạn xác định, ví dụ, các phương thức chặn và cắt điểm để tách mã rõ ràng thực hiện chức năng cần tách rời.
Spring-aspects cung cấp tích hợp với AspectJ. The spring-instrument module cung cấp hỗ trợ thiết bị lớp và triển khai trình nạp lớp được sử dụng trong các máy chủ ứng dụng nhất định. Mô-đun spring-instrument-tomcat chứa tác nhân thiết bị Spring Spring cho Tomcat. Messaging Spring Framework 4 bao gồm một mô-đun spring-messaging với các tóm tắt chính từ dự án Tích hợp Spring như Message, MessageChannel, MessageHandler và các mô- đun khác để làm nền tảng cho các ứng dụng dựa trên nhắn tin.
Mô-đun này cũng bao gồm một tập hợp các chú thích để ánh xạ các thông điệp tới các phương thức, tương tự như mô hình lập trình dựa trên chú thích Spring MVC. Data Access/Integration Data Access/Integration bao gồm các mô đun JDBC, ORM, OXM, JMS và Transaction modules. Mô-đun spring-jdbc cung cấp lớp trừu tượng JDBC, loại bỏ nhu cầu thực hiện riêng lẻ mã hóa JDBC và phân tích mã lỗi cụ thể của nhà cung cấp cơ sở dữ liệu. The spring-tx module hỗ trợ quản lý giao dịch khai báo và lập trình cho các lớp thực hiện các giao diện đặc biệt và cho tất cả POJO của bạn (Các đối tượng Java cũ đơn giản).
The spring-orm module cung cấp các lớp tích hợp cho các API ánh xạ quan hệ đối tượng phổ biến, bao gồm JPA, JDO và Hibernate. Sử dụng mô-đun spring-orm, bạn có thể sử dụng tất cả các khung O/Rmapping này kết hợp với tất cả các tính năng khác mà Spring cung cấp, chẳng hạn như đơn giản tính năng quản lý giao dịch khai báo đã đề cập trước đó. Mô-đun spring-oxm cung cấp một lớp trừu tượng hỗ trợ ánh xạ Object / XML các triển khai như JAXB, Castor, XMLBeans, JiBX và Xstream The spring-jms module (Java Messaging Service) chứa các tính năng để sản xuất và tiêu thụ tin nhắn. 20 do an Web The Web layer bao gồm spring-web, spring-webmvc, spring-websocket, and springwebmvc-portlet modules.
Spring-web cung cấp các tính năng tích hợp hướng web cơ bản, chẳng hạn như tải lên tệp nhiều phần chức năng và khởi tạo bộ chứa IoC bằng trình nghe Servlet và định hướng web bối cảnh ứng dụng. Nó cũng chứa một ứng dụng khách HTTP và các phần liên quan đến web của điều khiển từ xa Spring Spring-webmvc chứa bộ điều khiển mô hình Springview (MVC) và triển khai Dịch vụ web REST cho các ứng dụng web. Spring MVC khung cung cấp một sự tách biệt rõ ràng giữa mã mô hình miền và các biểu mẫu web và tích hợp với tất cả các tính năng khác của Spring Framework. Mô-đun spring-webmvc-portlet (còn được gọi là mô-đun Web-Portlet) cung cấp MVC triển khai được sử dụng trong môi trường Portlet và phản ánh chức năng của spring-webmvc mô-đun.
Test Hỗ trợ kiểm tra đơn vị và kiểm tra tích hợp các thành phần Spring với JUnit hoặc TestNG. Nó cung cấp tải nhất quán Spring ApplicationContexts và bộ nhớ đệm. Nó cũng cung cấp các đối tượng giả mà bạn có thể sử dụng để kiểm tra mã của mình một cách cô lập. Giới thiệu về Spring MVC The Spring Web model-view-controller (MVC) framework được thiết kế xung quanh một DispatcherServlet gửi yêu cầu đến trình xử lý, với ánh xạ trình xử lý có thể định cấu hình, xem độ phân giải, thời gian độ phân giải vùng và chủ đề cũng như hỗ trợ tải lên tập tin.
Trình xử lý mặc định dựa trên Chú thích @Controller và @RequestMapping, cung cấp một loạt các phương thức xử lý linh hoạt. Với sự ra mắt của Spring 3.0, cơ chế @Controller cũng cho phép bạn tạo RESTful. Các trang web và ứng dụng, thông qua chú thích @PathVariable và các tính năng khác. Mô hình Spring MVC Hình 1.2: Mô hình Spring MVC Model (Mô hình): Mô hình gồm các lớp java có nhiệm vụ: + Biểu diễn data và cho phép truy cập tới để get và set data trong (JAVABEAN), thường thì phần layer này mô phỏng một cách đầy đủ đối tượng từ thế giới thực.
+ Nhận các yêu cầu từ View (khung nhìn). + Thi hành các yêu cầu đó (tính toán, kết nối CSDL, …). + Trả về các giá trị tính toán theo yêu cầu của Controller. View (khung nhìn): Bao gồm các mã tương tự như JSP, HTML, CSS, XML, Javascript, JSON,… để hiển thị giao diện người dùng, các dữ liệu trả về từ Model thông qua Controller.
Tức là với một trang JSP này thì sẽ tương ứng với lớp java nào để xử lý nó và ngược lại, kết quả sẽ trả về trang jsp nào. Nó đóng vai trò điều tiết giữa View và Model. Như vậy, chúng ta có thể tách biệt được các mã java ra khỏi mã html. Người thiết kế giao diện và người lập trình java có thể mang tính chất độc lập tương đối.
Việc debug hay bảo trì sẽ dễ dàng hơn, việc thay đổi các giao diện của trang web cũng dễ dàng hơn. Các tính năng của Spring MVC - Phân tách rõ ràng vai trò. Mỗi vai trò - trình điều khiển, trình xác nhận, đối tượng lệnh, đối tượng biểu mẫu, mô hình đối tượng, DispatcherServlet, ánh xạ xử lý, trình phân giải khung nhìn, v. - có thể được thực hiện bởi một đối tượng chuyên ngành.
- Cấu hình mạnh mẽ và đơn giản của cả các lớp khung và ứng dụng như JavaBeans.Khả năng cấu hình này bao gồm tham chiếu dễ dàng trên các bối cảnh - Khả năng thích ứng, không xâm phạm và linh hoạt. Xác định bất kỳ chữ ký phương thức điều khiển nào bạn cần,có thể sử dụng một trong các chú thích tham số (chẳng hạn như: @RequestParam, @RequestHeader,@PathVariable, và nhiều hơn nữa) cho một kịch bản nhất định. The DispatcherServlet Spring MVC web MVC framework, giống như nhiều khung MVC web khác, được điều khiển theo yêu cầu, được thiết kế xung quanh một Servlet trung tâm gửi các yêu cầu tới các bộ điều khiển và cung cấp các chức năng khác tạo điều kiện phát triển các ứng dụng web. Tuy nhiên, Spring DispatcherServlet hơn thế.
Nó được tích hợp hoàn toàn với bộ chứa Spring IoC và như vậy cho phép bạn sử dụng mọi tính năng khác mà Spring có. Quy trình xử lý yêu cầu của Spring Web MVC DispatcherServlet được minh họa trong sơ đồ sau. 23 do an Hình 1.3: Quy trình xử lý yêu cầu trong Spring Web MVC DispatcherServlet là một Servlet thực tế (nó kế thừa từ lớp cơ sở httpServlet) và như vậy được khai báo trong ứng dụng web của bạn. Bạn cần ánh xạ các yêu cầu mà bạn muốn DispatcherServlet xử lý, bằng cách sử dụng ánh xạ URL.
Dưới đây là cấu hình Java EE Servlet tiêu chuẩn trong môi trường Servlet 3.0+: public class Mywebapplication implements WebApplicationInitializer { public void onStartup(ServletContext servletContext) throws ServletException { ServletRegistration.Dynamic reDynamic=servletContext.addMapping("/example"); } } DispatcherServlet là một Servlet thực tế (nó kế thừa từ lớp cơ sở httpServlet) và như vậy được khai báo trong tệp web.xml của ứng dụng web của bạn. Bạn cần ánh xạ các yêu cầu mà bạn muốn DispatcherServlet xử lý, bằng cách sử dụng ánh xạ URL trong cùng một tệp web. 24 do an Đây là cấu hình Java EE Servlet tiêu chuẩn <web-app> <servlet> <servlet-name>springDispatcherServlet</servlet-name> <servlet- \ class>org.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <!-- Map all requests to the DispatcherServlet for handling --> <servlet-mapping> <servlet-name> example </servlet-name> <url-pattern>/example/*</url-pattern> </servlet-mapping> </web-app> 1. Implementing Controllers Bộ điều khiển cung cấp quyền truy cập vào hành vi ứng dụng mà bạn thường xác định thông qua giao diện.
Bộ điều khiển diễn giải đầu vào của người dùng và biến nó thành một mô hình được thể hiện cho người dùng bằng cách xem. Spring thực hiện một bộ điều khiển theo một cách rất trừu tượng, cho phép bạn tạo ra nhiều loại bộ điều khiển khác nhau.5 đã giới thiệu một mô hình lập trình dựa trên chú thích cho các bộ điều khiển MVC sử dụng các chú thích như @RequestMapping, @RequestParam, @ModelAttribution, v.addAttribute("idBook", idBook); return "detailbook"; } 1. Handler mappings Trong các phiên bản trước của Spring, người dùng được yêu cầu xác định một hoặc nhiều bean- HandlerMapping trong ngữ cảnh ứng dụng web để ánh xạ các yêu cầu web đến các trình xử lý thích hợp.