Các tính năng core của Spring Framework có thể được sử dụng trong việc phát triển bất kỳ ứng dụng Java hoặc xây dựng các ứng dụng web trên nền tảng Java EE Java Enterprise Edition.. Theo
Trang 1ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO MÔN HỌC CÔNG NGHỆ PHẦN MỀM
Đề tài: Spring Framework
GIẢNG VIÊN PHỤ TRÁCH: PGS TS Nguyễn Thanh Bình
LỚP HỌC PHẦN: 18.11
NHÓM 3 Nguyễn Tiến Dũng Đặng Trung Nguyên Phan Thế Hòa Nguyễn Lê Thiên Như
Trang 2MỤC LỤ
MỤC LỤC 2
DANH MỤC HÌNH ẢNH 3
GIỚI THIỆU CHUNG VỀ SPRING FRAMEWORK 4
1 Tổng quan 4
2 Lịch sử ra đời 4
CÁC KHÁI NIỆM ĐẶC TRƯNG 5
1 Đơn giản hóa công việc phát triển 5
2 Nới lỏng ràng buộc giữa các thành phần thông qua Dependency Injection 5
2.1 Dependency 5
2.2 Dependency Injection 5
3 Tiếp cận lập trình khai báo 7
4 Giảm thiểu các mã nghi thức và soạn sẵn (boilerplate) 8
5 Phát triển hệ thống quy mô lớn 8
CÁC MODULE CHÍNH CỦA SPRING FRAMEWORK 8
ƯU ĐIỂM & NHƯỢC ĐIỂM 10
1 Ưu điểm 10
2 Nhược điểm 10
MỘT SỐ DỰ ÁN SPRING 11
SPRING BOOT 12
1 Đặc tính 12
2 Cấu trúc Spring Boot 12
3 Luồng xử lí request trong Spring Boot 13
SPRING MVC 14
1 Spring MVC 14
2 Cấu trúc của Spring MVC 14
3 Luồng xử lý request trong Spring MVC 15
Trang 3ỨNG DỤNG CỦA SPRING 16
DANH MỤC HÌNH ẢN Hình 1 Logo của Spring 4
Hình 2 Dependency Injection 6
Hình 3 Minh họa Lập trình hướng khía cạnh 7
Hình 4 Các module của Spring 9
Hình 5 Cấu trúc Spring Boot 13
Hình 6 Luồng xử lí request trong Spring Boot 13
Hình 7 Cấu trúc Spring MVC 14
Hình 8 Luồng xử lý request trong Spring MVC 15
Trang 4GIỚI THIỆU CHUNG VỀ SPRING FRAMEWORK
1 Tổng quan
Spring là framework mã nguồn mở
phổ biến nhất để xây dựng các ứng dụng
doanh nghiệp (Java Enterprise) Với
Spring, các nhà phát triển có thể tạo ra các
mã có hiệu suất cao, dễ kiểm thử và có thể
sử dụng lại được Các tính năng core của
Spring Framework có thể được sử dụng
trong việc phát triển bất kỳ ứng dụng Java
hoặc xây dựng các ứng dụng web trên nền
tảng Java EE (Java Enterprise Edition)
Spring nhẹ và trong suốt (nhẹ: kích thước nhỏ, version cơ bản chỉ khoảng 2MB; trong suốt: hoạt động một cách trong suốt với lập trình viên)
Hình 1 Logo của Spring
2 Lịch sử ra đời
2.1 EJB và Spring
Có thể nói rằng Spring Framework ra đời là nhờ sự thành công của EJB EJB
(Enterprise JavaBeans) là một kiến trúc phát triển dành cho các ứng dụng doanh nghiệp đòi hỏi tính mạnh mẽ và khả năng mở rộng cao EJB là một thành phần quan trọng của nền tảng Java EE EJB được tạo ra bởi hai gã khổng lồ công nghệ là IBM và Sun vào những năm cuối thập niên 90 Dưới sự phát triển của hai tập đoàn này, EJB đã trở nên nặng nề hơn Tiêu chuẩn EJB cũng nhanh chóng được thông qua Sau tất cả, EJB được ca ngợi là giải pháp tốt nhất để xây dựng các ứng dụng phân tán dành cho doanh nghiệp
Nhưng rồi những chỉ trích về chi tiết kỹ thuật của EJB đã tăng nhanh còn hơn sự nổi tiếng của nó EJB là một framework lớn với độ phức tạp cao Các nhà phát triền khi làm việc với EJB đã nhận ra rằng nó không hoạt động như những gì nó đã đề ra EJB chỉ tuyệt vời trên bàn giấy, nhưng ra thực tế đó lại là một chuyện khác
Phát triển bởi Pivotal Software
Phát hành lần đầu 1/10/2002
Phiên bản hiện tại 5.3.4
Ngôn ngữ Java
Nền tảng Java EE
Trang 5EJB vẫn được tiếp tục phát triển, dễ sử dụng hơn nhiều so với buổi ban đầu Nhưng những chỉ trích vẫn còn đó, nỗi thất vọng trong cộng đồng Java ngày càng tăng lên, đòi hỏi cần có một giải pháp thay thế
2.2 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
CÁC KHÁI NIỆM ĐẶC TRƯNG
Spring Framework được phát triển dựa trên các quan điểm sau:
1 Đơn giản hóa công việc phát triển
o Thông qua việc sử dụng các đối tượng Java thuần túy, hay POJO (Plain Old Java Object)
o Trong Java, POJO thường được dùng để chỉ những object Java bình thường, không theo theo bất kỳ một mô hình, quy ước, nào cả hay nói theo cách khác thì class của những object này không implement hay extend class nào khác; chỉ bao gồm các thuộc tính và các phương thức
3 Nới lỏng ràng buộc giữa các thành phần thông qua Dependency Injection 3.1 Dependency
Dependency là một loại quan hệ giữa 2 class, trong đó một class hoạt động độc lập và class còn lại phụ thuộc vào class kia
3.2 Dependency Injection
Dependency Injection (DI) là một kỹ thuật lập trình giúp tách một class độc lập với các biến phụ thuộc
3.2.1 Nhiệm vụ của Dependency Injection
o Tạo ra các object
o Biết được class nào cần những object đấy
o Cung cấp cho những class đó những object chúng cần
Trang 6Bằng cách này, nếu trong tương lai object đó có sự thay đổi thì DI có nhiệm vụ cấp lại những object cần thiết cho class
Hình 2 Dependency Injection
3.2.2 Ưu điểm
o Giúp viết Unit test dễ dàng hơn
o Giảm thiểu đc boilerplate code vì việc khởi tạo dependency đc làm bởi một component khác
o Mở dụng dự án dễ dàng hơn
o Giúp ích trong việc liên kết lỏng (loose coupling) giữa các thành phần trong dự án
3.2.3 Nhược điểm
o Khá phức tạp để học và nếu dùng quá đà thì có thể dẫn tới một số vấn đề khác
o Rất nhiều lỗi ở compile time có thể bị đẩy sang runtime
o Có thể làm ảnh hưởng tới chức năng auto-complete hay Find references của một số IDE
Trang 74. Tiếp cận lập trình khai báo bằng cách sử dụng các quy tắc (convention) và các khía cạnh (aspect) chung.
o Lập trình khai báo (declarative programming) là một mẫu hình lập trình theo
phong cách xây dựng cấu trúc và các yếu tố của chương trình máy tính để thể hiện tính logic của sự tính toán mà không mô tả luồng điều khiển của nó
o Coding conventions là tập hợp những nguyên tắc chung khi lập trình nhằm làm
cho code dễ đọc, dễ hiểu, do đó dễ quản lý, bảo trì hơn
o Aspect Oriented Programming (AOP) – lập trình hướng khía cạnh: là một kỹ
thuật lập trình nhằm phân tách chương trình thành cách moudule riêng rẽ, phân biệt, không phụ thuộc nhau
o Khi hoạt động, chương trình sẽ kết hợp các module lại để thực hiện các chức năng nhưng khi sửa đổi 1 chức năng thì chỉ cần sửa 1 module
o AOP cho phép chúng ta thêm vào các ứng dụng đã tồn tại những đoạn code xử
lý mới mà không phải chỉnh sửa code của các ứng dụng này
o AOP không phải dùng để thay thế OOP mà để bổ sung cho OOP
AOP khắc phục những hạn chế và tăng hiệu quả của OOP (Object Oriented Programming) Trong khi OOP còn nhiều thiếu sót chẳng hạn như khó tạo ra những ứng dụng khó, phức tạp thì AOP ra đời bổ sung cho OOP Tuy vậy, AOP không phải để thay thế hẳn OOP
Với AOP, khả năng tái sử dụng mã nguồn được tăng cường tối đa
Trong AOP, module nào làm việc của module đó, do vậy đảm bảo tính Đơn nhiệm (Single responsibility principle), giải quyết cả vấn đề chéo mã nguồn (code tangling) và dàn trải mã nguồn (code scattering) Do vậy, tính module hóa cũng cao hơn các kiểu lập trình khác
Trang 8Hình 3 Minh họa Lập trình hướng khía cạnh
5 Giảm thiểu các mã nghi thức và soạn sẵn (boilerplate)
o Sử dụng các template và các aspect
6 Thường được sử dụng khi phát triển hệ thống quy mô lớn
CÁC MODULE CHÍNH CỦA SPRING FRAMEWORK
1 Core Container
Core container cung cấp chức năng cơ bản của Spring Thành phần chính của nó
là Bean Factory, một cài đặt của Factory pattern BeanFactory áp dụng IoC pattern để đặc tả sự phụ thuộc từ code của ứng dụng
2 Spring Context/Application Context
Spring context là một file cấu hình để cung cấp thông tin ngữ cảnh của Spring Spring context cung cấp các service như JNDI access, EJB integration, e-mail, internalization, validation, và scheduling functionality Cung cấp cách để truy cập các đối tượng
3 Spring AOP (Aspect-Oriented)
Spring AOP module tích hợp chức năng lập trình hướng khía cạnh vào Spring framework thông qua cấu hình của nó Spring AOP module cung cấp các dịch vụ quản
lý giao dịch cho các đối tượng trong bất kỳ ứng dụng nào sử dụng Spring Với Spring AOP chúng ta có thể tích hợp declarative transaction management vào trong ứng dụng
mà không cần dựa vào EJB component 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
4 Spring DAO
Tầng JDBC và DAO đưa ra một cây phân cấp exception để quản lý kết nối đến database, điều khiển exception và thông báo lỗi được ném bởi vendor của database Tầng exception đơn giản điều khiển lỗi và giảm khối lượng code mà chúng ta cần viết như mở và đóng kết nối Module này cũng cung cấp các dịch vụ quản lý giao dịch cho các đối tượng trong ứng dụng Spring
5 Spring ORM
Spring có thể tích hợp với một vài ORM framework để cung cấp Object Relation tool bao gồm: JDO, Hibernate, OJB và iBatis SQL Maps
6 Spring Web module
Trang 9Nằm trên application context module, cung cấp context cho các ứng dụng web Spring cũng hỗ trợ tích hợp với Struts, JSF và Webwork Web module cũng làm giảm bớt các công việc điều khiển nhiều request và gắn các tham số của request vào các đối tượng domain
7 Spring MVC Framework
MVC Framework thì cài đặt đầy đủ đặc tính của MVC pattern để xây dựng các ứng dụng Web MVC framework thì cấu hình thông qua giao diện và chứa được một
số kỹ thuật view bao gồm: JSP, Velocity, Tiles và generation of PDF và Excel file Ngoài những module chính của spring trên thì nó còn một số module khác,dưới đây là mô hình đầy đủ 20 modules của spring framework cho một ứng dụng đầy đủ các yêu cầu
Hình 4 Các module của Spring
Trang 10ƯU ĐIỂM & NHƯỢC ĐIỂM
1 Ưu điểm
o Sử dụng POJO (Plain Old Java Object), giúp phát triển ứng dụng Ngoài ra còn
giúp loại bỏ EJB thông thường bằng cách để người dùng sử dụng servlet container như Tomcat Chính điều này khiến Spring Framework trở thành khung phần mềm nhẹ
o Tính linh hoạt để cấu hình Spring: Spring hỗ trợ sử dụng cả cấu hình XML lẫn
Java-based annotations để cấu hình cho Spring Beans
o Không cần Server: Spring framework cung cấp sức chứa nhẹ, điều này có thể
kích hoạt mà không cần sử dụng web server hay server của ứng dụng.\
o Sử dụng AOP Spring: Mô đun Spring AOP mang lại vài lợi ích cho người phát
triển Nó cho phép họ có nhiều loại đơn vị biên dịch khác nhau hoặc trình tải lớp riêng biệt Đi cùng đó là việc sử dụng IoC để tiêm phụ thuộc để cho phép các khía cạnh của
nó được cấu hình bình thường
o Không cần tái tạo lại: Một trong những lợi ích chính của Spring Framework
đối với sự phát triển ứng dụng doanh nghiệp là có thể tận dụng từ Spring Spring sử dụng công nghệ như JDK timers, ORM frameworks, JAVA EE… Vì thế nhà phát triển không cần phải học hết các công nghệ hay frameworks để phát triển ứng dụng
o Sử dụng tính Mô đun: Spring Framework cung cấp tính mô đun cho nhà phát
triển Giúp họ chọn gói hoặc lớp thích hợp để sử dụng hoặc bỏ qua Với hàng ngàn gói
và lớp, nó đến như một lợi ích cho nhà phát triển để xác định và chọn đúng loại mà không gặp vấn đề
o Dễ kiểm tra: Một trong những tính năng của Spring tiêm phụ thuộc giúp tăng
cường khả năng kiểm tra Đơn giản hóa việc đưa dữ liệu thử nghiệm dùng JavaBean POJO
o Tính nhất quán của quản lý giao dịch: Spring Framework có thể dễ dàng tăng
hoặc giảm quy mô giao dịch lân cận cũng như toàn cầu bằng cách sử dụng JTA ĐÓ là
do giao diện quản lý giao dịch đã nhất quán
o Khung web được thiết kết tốt: Spring có sự thiết kế mô hình MVC tốt để cung
cấp giải pháp thay thế tuyệt vời cho khuôn khổ web kế thừa
o Kiểm soát đảo ngược và API’s: Spring Framework cung cấp sự đảo ngược kiểm
soát và APIs để dịch những ngoại lệ được ném ra bởi JDBC, Hibernate ném nó thành các ngoại lệ không được kiểm tra và nhất quán
Trang 112 Nhược điểm
o Sự phức tạp của Spring: Những lời chỉ trích chính mà Spring Framework nhận
được là nó quá phức tạp và thiếu tập trung rõ rang vì nó có hơn 2400 lớp với 49 công
cụ khác khiến các nhà phát triển sử dụng nó rất phức tạp
o Đường cong học tập cao: Sẽ khó khăn cho người mới lập trình để học và sử
dụng Spring Framework Là bởi vì các phương pháp lập trình mới và yêu cầu chi tiết của mỗi phương pháp trong số chúng để phát triển trên ứng dụng
o Nhiều cơ chế song song: Nhiều phương án lựa chọn đưa ra gây nhiễu loạn, khó
hiểu Cần rất nhiều sự am hiểu từ phía nhà phát triển để biết phương thức nào hoặc lớp nào là nên dùng trong những trường hợp cụ thể
o Thiếu hướng dẫn, nguyên tắc: Không có nhiều nguyên tắc, hướng dẫn trên các
diễn đàn, trang chủ cho người dùng trong dữ liệu của Spring
MỘT SỐ DỰ ÁN SPRING
1 Spring Boot
Đưa ra quan điểm chính kiến về việc xây dựng các ứng dụng Spring và giúp bạn bắt đầu và chạy nhanh nhất có thể
2 Spring Data
Cung cấp một cách tiếp cận nhất quán để truy cập dữ liệu - quan hệ, không quan hệ, giảm bản đồ và hơn thế nữa
3 Spring Cloud
Cung cấp một bộ công cụ cho các mẫu phổ biến trong hệ thống phân tán Hữu ích cho việc xây dựng và triển khai microservices
4 Spring Security
Bảo vệ ứng dụng của bạn bằng hỗ trợ xác thực, ủy quyền toàn diện và có thể mở rộng
5 Spring Batch
Đơn giản hóa và tối ưu hóa công việc xử lý các hoạt động hàng loạt khối lượng lớn
6 Spring for Android
Cung cấp các thành phần Spring chính để sử dụng trong việc phát triển các ứng dụng Android
7 Spring Web Services
Tạo điều kiện thuận lợi cho việc phát triển các dịch vụ web SOAP theo hợp đồng
8 Spring Mobile
Trang 12Đơn giản hóa sự phát triển của các ứng dụng web dành cho thiết bị di động thông qua các tùy chọn phát hiện thiết bị và hiển thị liên tục
9 Spring HATEOAS
Đơn giản hóa việc tạo các biểu diễn REST tuân theo nguyên tắc HATEOAS
10 Spring Statemachine
Cung cấp một framework cho các nhà phát triển ứng dụng sử dụng các ý tưởng máy trạng thái với các ứng dụng Spring
Ngoài ra còn có các dự án khác như: Spring CredHub, Spring Flo, Spring for Apache Kafka, Spring LDAP, Spring AMQP, Spring Cloud Data Flow
SPRING BOOT
Spring Boot thuộc trong nhóm module của Spring Framework, cung cấp tính năng RAD (Rapid Application Development)
Spring Boot được sử dụng để tạo ra một ứng dụng độc lập dựa trên Spring mà bạn có thể chạy
Spring Boot không sinh ra code và tất nhiên hoàn toàn không có yêu cầu cấu hình XML nào, mà nó sử dụng quy ước về mô hình thiết kế phần mềm theo cấu hình, có nghĩa
là nó giảm tải công việc cho các lập trình viên
1 Đặc tính
o Tạo các ứng dụng Spring độc lập
o Nhúng trực tiếp Tomcat, Jetty hoặc Undertow mà không cần triển khai các tệp WAR
o Nó tự động cấu hình Spring bất cứ khi nào có thể
o Nó cung cấp các tính năng sẵn sàng sản xuất như số liệu, kiểm tra sức khoẻ và cấu hình bên ngoài
o Không tự sinh mã và không yêu cầu cấu hình XML
2 Cấu trúc Spring Boot
Spring Boot tuân theo một kiến trúc phân lớp, trong đó mỗi lớp giao tiếp với lớp ngay bên dưới hoặc bên trên (cấu trúc phân cấp) nó
o Presentation Layer xử lý các yêu cầu HTTP, dịch tham số JSON thành đối tượng và xác thực yêu cầu và chuyển nó đến lớp nghiệp vụ Nói tóm lại, nó bao gồm các khung nhìn, tức là phần giao diện người dùng