Câu hỏi & gợi ý trả lời
Q1. Sự khác biệt giữa Spring Boot và Spring Framework là gì?
Spring Framework cung cấp các thành phần cốt lõi như Dependency Injection (DI) và Aspect Oriented Programming (AOP). Spring Boot được xây dựng dựa trên nó, đóng vai trò là một 'bộ công cụ' giúp khởi tạo ứng dụng nhanh chóng bằng Auto-configuration và nhúng sẵn Web Server (như Tomcat).
Q2. Ý nghĩa của annotation @SpringBootApplication là gì?
Đây là annotation kết hợp của ba annotation khác: @Configuration (đánh dấu class là nguồn định nghĩa bean), @EnableAutoConfiguration (kích hoạt tính năng cấu hình tự động của Spring Boot) và @ComponentScan (quét các package để tìm kiếm các Spring Beans).
Q3. Cơ chế Auto-configuration trong Spring Boot hoạt động như thế nào?
Spring Boot tự động cấu hình ứng dụng dựa trên các class có sẵn trên classpath. Nó quét file META-INF/spring.factories để tìm các configuration classes phù hợp, sau đó áp dụng chúng nếu lớp đó chưa được người dùng định nghĩa thủ công.
Q4. Spring Boot Starters là gì và tại sao chúng quan trọng?
Starters là tập hợp các dependency được đóng gói lại (ví dụ: spring-boot-starter-web), giúp người dùng quản lý thư viện dễ dàng hơn. Chúng tự động giải quyết các xung đột phiên bản (dependency hell) và đảm bảo các thư viện tương thích với nhau.
Q5. Làm thế nào để xử lý Exception toàn cục trong Spring Boot?
Sử dụng annotation @ControllerAdvice kết hợp với @ExceptionHandler. Cách này cho phép chúng ta tách biệt logic xử lý lỗi ra khỏi business logic, giúp code sạch và dễ bảo trì hơn.
Q6. Sự khác biệt giữa @RestController và @Controller?
@Controller được dùng để trả về view (thường là HTML), trong khi @RestController là sự kết hợp của @Controller và @ResponseBody. Kết quả trả về của @RestController sẽ được chuyển trực tiếp thành JSON/XML trong body của HTTP response.
Q7. Spring Actuator dùng để làm gì?
Actuator cung cấp các 'production-ready features' giúp monitor và quản lý ứng dụng, như kiểm tra trạng thái sức khỏe (health checks), metrics, thông tin môi trường và thread dumps thông qua các endpoint HTTP.
Q8. Profile trong Spring Boot là gì?
Profile cho phép định nghĩa các cấu hình riêng biệt cho các môi trường khác nhau (như dev, test, prod). Bạn có thể cấu hình file application-{profile}.properties và kích hoạt chúng bằng tham số --spring.profiles.active.
Q9. Làm thế nào để truy cập cơ sở dữ liệu trong Spring Boot?
Thường sử dụng Spring Data JPA, một abstraction layer giúp đơn giản hóa việc thao tác với database thông qua các Repository interface mà không cần viết nhiều truy vấn SQL thủ công.
Q10. Dependency Injection (DI) là gì?
DI là mô hình mà các đối tượng (beans) không tự khởi tạo các phụ thuộc của chính nó, mà được cung cấp (inject) bởi một container (ở đây là Spring IoC container). Điều này làm tăng tính decoupling và dễ dàng unit test.
Q11. Bảo mật ứng dụng (Security) trong Spring Boot có gì đặc biệt?
Spring Security cung cấp bảo mật toàn diện từ Authentication (xác thực danh tính) đến Authorization (phân quyền). Nó bảo vệ ứng dụng khỏi các lỗi phổ biến như CSRF, Session Fixation và tích hợp dễ dàng với OAuth2, JWT.
Q12. Sự khác biệt giữa @Component, @Service, @Repository?
Đây đều là các specialization của @Component. @Service dùng cho business logic, @Repository dùng cho database access (với ngoại lệ DataAccessException), còn @Component là dạng chung dành cho bất kỳ Bean nào.