Những câu hỏi phổ biến về Spring Framework?



Spring Framework
Spring framework là một trong những framework phổ biến nhất của Java EE framework cho phát triển các ứng dụng doanh nghiệp. Dependency Injection - DI và Aspect Oriented Programming - AOP là trái tim của nó.

Nếu là một lập trình viên Java, chắn hẳn bạn sẽ không thể bỏ qua framework này. Vì hiện tại, hầu hết các ứng dụng đều sử dụng đến Spring framework như một giải pháp hiệu quả và chuyên nghiệp. Do đó, trong các buổi phỏng vấn vị trí lập trình viên Java, hay một SA thì hiển nhiên nhà tuyển dụng sẽ hỏi bạn những câu hỏi về Spring framework như một lẽ bình thường. Và dưới đây là danh sách các câu hỏi mà nhà tuyển dụng sẽ hỏi bạn về Spring framework:


1 - Spring framework là gì?


Spring là một trong những framework được sử dụng nhiều nhất trong Java EE framework. Hai khái niệm chính của Spring framework core là "Dependency Injection - DI" và "Aspect Oriented Programming - AOP".

Spring framework được sử dụng như là ứng dụng java cơ bản để đạt được kỹ thuật "loose coupling" giữa các components khác nhau bằng cách sử dụng kỹ thuật DI và hỗ trợ việc thực hiện chéo những task vụ như logging, authentication, ... theo kỹ thuật AOP.

Spring framework cung cấp khá nhiều tính năng khác và số lượng lớn các module cho các mục đích cụ thể, ví dụ như web có Spring MVC, hỗ trợ security có Spring Security, tương tác với datababse có Spring JDBC, và nhiều thứ khác nữa. Ngoài ra, nó còn là một dự án open source với rất nhiều cộng đồng sử dụng, tài liệu tham khảo. Một điều nữa là sử dụng Spring framework cho lập trình viên cảm giác thật thú vị và mới mẻ.

spring overview
Overview of the Spring Framework

2 - Một số tính năng quan trọng và ưu điểm của Spring framework?


Spring framework được xây dựng trên 2 khái niệm design, đó là DI và AOP. Và một vài tính năng quan trọng của Spring framework như sau:


  • Lightweight và very little overhead trong việc phát triển ứng dụng của bạn.
  • Dependency Injection hoặc Inversion of Control được sử dụng để giúp các component tách rời, độc lập với nhau. Spring container sẽ giúp gắn kết những components này lại với nhau theo đặc tả business của bạn.
  • Spring IoC container quản lý vòng đời của Spring Bean và các cấu hình của project chẳng hạn như JNDI lookup.
  • Spring MVC framework được sử dụng cho phát triển ứng dụng web rất dễ dàng với việc hỗ trợ rất tốt các tính năng web services, json,...
  • Hỗ trợ quản lý transaction, JDBC operations, File uploading, Exception Handling,... rất dễ dàng bằng cách cấu hình được rút gọn, thay vào đó là sử dụng annotation hoặc spring bean configuration file.
Và một vài ưu điểm khi sử dụng Spring framework:
  • Làm giảm đi sự phụ thuộc giữa các components khác nhau của ứng dụng, Spring IoC container làm nhiệm vụ khởi tạo resources hoặc beans và "tiêm - inject" chúng theo sự phụ thuộc khác nhau.
  • Thực hiện unit test case rất dễ bởi vì business logic của bạn không có sự phụ thuộc trực tiếp. Việc thực hiện chỉ là viết test configuration và inject mock bean cho các mục đích test khác nhau.
  • Làm giảm đi khối lượng code rất nhiều, chẳng hạn như việc khởi tạo đối tượng, open/close các resources,...
  • Spring framework chia thành nhiều module riêng biệt, do đó việc sử dụng các features trong Spring framework rất tự do... Ví dụ như ứng dụng không sử dụng tính năng transaction, thì không cần thiết phải thêm dependency này vào.
  • Spring framework hỗ trợ hầu hết các tính năng của Java EE, thậm chí còn nhiều hơn nữa.

3 - Bạn hiểu gì về Dependency Injection?


Dependency Injection - DI giúp chúng ta loại bỏ sự phụ thuộc "vật lý" của các module, components và giúp ứng dụng trở nên "loosely coupled", dễ mở rộng và có khả năng maintain. Chúng ta có thể thực hiện DI pattern để "quản lý" những phụ thuộc ở thời điểm chương trình chạy - runtime, không phải là lúc chương trình biên dịch.

Một vài lợi ích của DI như: tách rời các phụ thuộc giữa các module, giảm thiểu số lượng line of code - LOC, testing thuận lợi,...

Trong Java, chúng ta có thể thực hiện DI bằng cách sử dụng thuần Java hoặc các framework rất phổ biến khác như Spring framework, Google Guide, Seasar2,...


4 - Làm thế nào để thực hiện DI trong Spring framework?



Để thực hiện được DI, chúng ta có 2 cách:

  • Sử dụng Constructor inject 
  • Sử dụng Setter method..

Cấu hình trong file xml hoặc dùng annotation 

5 - Lợi ích của việc sử dụng Spring Too.l Suite - STS?


Chúng ta có thể cài đặt những plugin cho Eclipse để có được toàn bộ tính năng của STS, tuy nhiên STS vẫn được release song song của Eclipse với các tính năng quan trọng như hỗ trợ Maven, template cho các loại dư án khác nhau của Spring framework, và có sẵn VMware vFabric™ tc Server, một server hỗ trợ tối đa cho Spring applications.

Do vây, thay vì cài đặt toàn bộ những plugin hỗ trợ Spring framework, STS đã có tất cả mọi thứ để giúp phát triển một ứng dụng Spring một cách dễ dàng.


6 - Liệt kê những module quan trọng của Spring framework



Một vài module quan trọng của Spring framework sau:
  • Spring Context – hỗ trợ dependency injection.
  • Spring AOP – hỗ trợ aspect oriented programming.
  • Spring DAO – hỗ trợ database operations sử dụng DAO pattern
  • Spring JDBC – hỗ trợ JDBC and DataSource.
  • Spring ORM – hỗ trợ ORM
  • Spring Web Module – hỗ trợ phát triển ứng dụng web.
  • Spring MVC – Model-View-Controller hỗ trợ phát triển web application, web services vv.

7 - Aspect Oriented Programming - AOP là gì?


Trong các ứng dụng lớn, có một số tính năng chung có thể được áp dụng cho hầu hết các module trong hệ thống như logging, transaction, data validation, authentication, ... Trong Object Oriented Programming, các module của ứng dụng được thực hiện bởi các class, các module này tương tác với nhau thông qua các hành vi của các object. Tuy nhiên, các hành vi đan xen lẫn nhau của các modile trên thì OOP lại không thể hỗ trợ được, dẫn đến tính nhất quán của ứng dụng bị thay đổi, khó kiểm soát. Để khắc phục được nhược điểm này, AOP đã được phát triển.

AOP là cho phép thực hiện các vấn đề riêng biệt một cách linh hoạt và kết hợp chúng lại để tạo nên hệ thống. AOP bổ sung cho OOP bằng việc hỗ trợ một dạng module khác, cho phép "kéo" thể hiện chung của vấn đề đan nhau vào một khối. Khối này được gọi là ‘aspect’ (tạm dịch là ‘lát’ – hàm ý lát cắt đi qua nhiều lớp object, từ chữ ‘aspect’ này chúng ta có tên của phương pháp phát triển phần mềm mới: aspect-oriented programming  - AOP. Nhờ source code được tách riêng, vấn đề đan nhau trở nên dễ kiểm soát hơn. Các aspect của hệ thống có thể thay đổi, thêm hoặc xóa lúc build và có thể tái sử dụng. Một dạng buid đặc biệt có tên là Aspect Weaver thực hiện kết hợp các thành phần riêng lẻ lại thành hệ thống hợp nhất.


8 - Spring IoC Container là gì?



Inversion of Control - IoC là kỹ thuật để đạt được "loose-coupling" của sự phụ thuộc ở object. Để đạt được kỹ thuật "loose coupling" và "dynamic binding" của những object lúc runtime, những object này được define sự phụ thuộc giữa chúng và được "tiêm" vào bởi những "assembler objects". Spring IoC container là chương trình 'tiêm" phụ thuộc vào những object và làm cho nó sẵn sàng để sử dụng.

Những class của Spring Framework IoC container nằm trong hai package org.springframework.beans và org.springframework.context, nó cung cấp những cách khác nhau để thực hiện "decouple" ở các object dependencies.

Một vài cách thức sử dụng ApplicationContext thường dùng là:
  •   AnnotationConfigApplicationContex: Cho standalone java applications sử dụng annotations để configuration.
  • ClassPathXmlApplicationContext: Cho standalone java applications sử dụng XML configuration.
  • FileSystemXmlApplicationContext: Tương tự như ClassPathXmlApplicationContext, ngoại trừ việc file XML có thể được load ở bất kì đâu trong hệ thống.
  • AnnotationConfigWebApplicationContext và XmlWebApplicationContext được sử dụng cho web applications.

SHARE THIS

2 comments:

  1. I really like what you guys tend to be up too. This kind of clever work and coverage! Keep up the good works guys I've you guys to blogroll. paypal login my account

    ReplyDelete
  2. Good web site you've got here.. It's hard to find good quality writing like yours these days. I really appreciate individuals like you! Take care!! itunes login account

    ReplyDelete