Những chủ đề thường được hỏi sẽ về các vấn đề chính như sau:
- Spring overview
- Dependency Injection
- Spring Beans
- Spring Annotations
- Spring Data Access
- Aspect Oriented Programming (AOP)
- Spring MVC
Loạt bài này sẽ gồm ba phần, trong phần này, chúng ta sẽ lần lượt đi qua Spring overview, Dependency Injection.
Spring overview
1.Spring là gì?
Spring là một open source framework dành cho Java Enterprise. Core feature của Spring có thể dùng để xây dựng bất cứ Java application nào, các extensions của Spring có thể được sử dụng cho việc xây dựng web application trên nền tảng Java EE. Spring framework cũng hướng tới mục tiêu làm cho việc phát triển các ứng dụng trên nền tảng Java EE dễ dàng hơn và thúc đẩy việc lập trình tốt hơn bằng model POJO-based.
2.Lợi ích mà Spring framework mang lại
Spring framwork mang lại cho chúng ta sự gọn nhẹ (lightweight), sử dụng Inversion of control (IoC) để giúp loose coupling, sử dụng Aspect oriented programming để tách biệt các thành phần business, có container nới quản lý tất cả life cycle và config của các object trong application, phát triển ứng dụng đơn giản với MVC, có transaction management, cung cấp các API tiện lợi cho việc handling exception.
3.Các module của Spring framework
Những module căn bản của Spring gồm có: Core module, Bean module, Context module, Expression Language module, JDBC module, ORM module , OXM module, Java Messaging Service (JMS) module, Transaction module, Web module, Web-Servlet module, Web-Struts module, Web-Portlet module.
4.Core container
Đây là module cơ bản của Spring, cái mà sẽ cung cấp nhưng tính năng cơ bản của Spring framework. BeanFactory chính là trái tim của bất cứ Spring-based application nào, Spring framework được xây dụng trên module này và nó cũng chính là Spring container.
5.BeanFactory
BeanFactory là implementation của factory pattern dùng để apply inversion of control để tách biệt config và dependencies. Thông thường BeanFactory sẽ được implement bằng XmlBeanFactory.
6.XmlBeanFactory
org.springframework.beans.factory.xml.XmlBeanFactory sẽ load file XML chưa định nghĩa các beans. Container này sẽ đọc config từ XML file và sử dụng nó để khởi tạo application.
7.AOP module
AOP module sử dụng để phát triển application theo hướng khía cạnh. Phần lớn được cung cấp bởi AOP Alliance để chắc chắn đảm bảo khả năng tương tác giữa Spring và các AOP framwork khác.
8.JDBC abstraction và DAO module
Với JDBC abstraction và DAO module, chúng ta có thể chắc chắn về việc giữ cho code thao tác với database luôn đơn giản và sạch sẽ, giảm thiểu thao tác manual để maintain connection hay transaction nhằm cũng tránh được các trường hợp fail do close database resources…, ngoài ra nó còn đưa ra một tầng exeption có nghĩa hơn.
9.Object relational mapping (ORM) module
Spring hỗ trợ việc sử dụng ORM thông qua JDBC, ngoài ra cũng support các ORM framework như Hibernate, JPA…
10.Web module
Spring web module được xây dựng dựa trên application context module, cung cấp web-based context. Module này hỗ trợ web-oriented như handling multipart request, binding request parameter với business object…
11.Spring MVC module
Spring MVC module được sinh ra để hỗ trợ xây dựng MVC web application tốt hơn, mặc dù Spring vẫn có thể integrate được với những MVC framework khác. Spring MVC sử dụng IoC để tách biệt logic ra khỏi controller, vào trong business object. Với Spring MVC ta có thể khai báo để bind request parameter với business object một cách dễ dàng.
12.Spring configuration file
Spring configuration file là một file XML. File này sẽ chứa các class information và mô tả làm sao chúng được cài đặt và giao tiếp với những class khác.
13.Spring IoC container
Spring IoC chịu trách nhiệm cho việc tạo ra các object, quản lý chúng với các dependency (dependency injection (DI)), wiring chúng lại với nhau, cài đặt chúng, cũng như quản lý lifecycle của chúng.
14.Lợi ích của IoC
IoC hay dependency injection tối thiểu hóa lương code trong application. Nó giúp cho application dễ test hơn, bởi vì singleton hay JNDI lookup không thể sử dụng trong Unit test. IoC container cũng hỗ trợ eager instantiation và lazy loading.
15.Implement Application context phổ biến
FileSystemXmlApplicationContext, chúng ta phải truyền đường dẫn đầy đủ của file XML vào constructor.
ClassPathXmlApplicationContext, container sẽ tìm file XML từ trong CLASSPATH.
WebXmlApplicationContext, container sẽ tìm file XML từ web application.
16.Điểm khác nhau giữa BeanFactory và Application context
Application context cung cấp phương tiện để giải quyết các text message bằng cách implement MessageSource, ngoài ra nó cũng đưa ra cách thức generic để load file resource (ví dụ như file hình ảnh).
17.Cấu trúc của Spring application
Interface khai báo tất cả các function. Implementation bao gồm các thuộc tính, getter, setter, function… Spring AOP. Spring configuration XML file. Và chương trình sử dụng tất cả các thứ trên
Dependency Injection
18.Dependency Injection trong Spring
Dependency injection là một concept chung, có thể mô tả bằng nhiều cách. Concept này nói rằng bạn sẽ không tạo ra object nhưng bạn sẽ phải mô tả làm sao để chúng được tạo ra. Và bạn cũng không gọi kết nối trực tiếp các component cũng như service với nhau trong code nhưng bạn phải mô tả component nào thì cần service nào trong file config. Sau khi khai báo tất cả thì container cụ thể là IoC container sẽ làm nhiệm vụ hook tất cả lại với nhau.
19.Những kiểu khác nhau của IoC
- Constructor-based dependency injection: Constructor-based DI được thực hiện khi container invoke một class constructor với một số tham số, mỗi tham số sẽ đại diện cho một dependency đến một class khác.
- Setter-based dependency injection: Setter-based DI được thực hiện bởi container bằng cách gọi setter method từ bean sau khi invoke no-argument constructor hay no-argument static factory để khởi tạo bean.
20.Nên sử dụng Constructor-based hay setter-based DI
Có thể sử dụng cả hai. Best practice là sử dụng constructor argument những dependency bắt buộc, và setter cho optional dependency.