Welcome to MikeDaDev's Blog – notes on Java, backend & system design.

Explore
MikeDaDev's Blog

#spring-framework

Things I've written about #spring-framework
  • dependency injection

    Dependency Injection (DI) là pattern dùng để hiện thực nguyên tắc Inversion of Control (IoC). Object không tự `new` mấy thứ nó cần nữa, mà để một bên quản lý chung (như Spring Container) "tiêm" (inject) dependency vào qua constructor, setter hoặc field. Nhờ vậy các class ít dính chặt vào nhau (loose coupling), code linh hoạt, dễ sửa và nhất là dễ viết unit test.

  • spring security với jwt

    Spring Security kết hợp JWT (JSON Web Token) là cách phổ biến để bảo mật RESTful API. Thay vì stateful (Session/Cookie lưu trên server), xác thực chuyển sang stateless: mọi thông tin nằm trong token, nên hệ thống dễ scale hơn và đỡ tốn bộ nhớ trên server.

  • http abstractions

    Các class và interface HTTP của Spring (ResponseEntity, HttpHeaders, MediaType, RestTemplate, WebClient, RestClient...) gói HTTP thô thành object dễ dùng, giúp code độc lập với web server bên dưới và dễ unit test hơn.

  • spring test annotations

    Ghi chú về các Spring Test annotations để viết Unit Test và Integration Test trong Spring Boot: @SpringBootTest, test slices, @MockitoBean/@MockitoSpyBean (thay @MockBean/@SpyBean), Testcontainers.

  • ioc container & application context

    IoC Container là phần lõi của Spring Framework: tự khởi tạo, nối và quản lý vòng đời của các object (Beans) thông qua Dependency Injection. **Application Context** là bản mở rộng (interface) của IoC Container, ngoài các tính năng cơ bản còn có thêm event, đa ngôn ngữ (i18n), tích hợp AOP và nhiều thứ khác.

  • spring data jpa

    Spring Data JPA là module của Spring Framework, nằm trên Java Persistence API (JPA). Thay vì viết boilerplate code để làm việc với database, bạn chỉ cần khai báo interface (kế thừa `JpaRepository`), Spring sẽ tự cung cấp phần implement cho các thao tác CRUD cơ bản. Điểm hay nhất là tự sinh câu SQL từ tên method (ví dụ `findByEmailAndStatus`), và hỗ trợ sẵn phân trang, sắp xếp, auditing.

  • spring jackson annotations

    Các annotation của Jackson (có sẵn trong Spring Boot) cho phép kiểm soát chi tiết việc chuyển đổi (serialization và deserialization) giữa object Java và JSON. Với @JsonProperty (đổi tên trường), @JsonIgnore (bỏ dữ liệu nhạy cảm khi trả về), @JsonFormat (định dạng ngày tháng) hay @JsonInclude (lọc giá trị null), bạn tùy biến được cấu trúc dữ liệu qua API mà không phải đụng vào logic.

  • @Transactional & Spring AOP

    @Transactional và Spring AOP (Aspect-Oriented Programming) là hai thứ đứng sau cơ chế quản lý transaction tự động của Spring. Nhờ chúng mà business logic tách được khỏi mấy việc kỹ thuật lặp đi lặp lại (cross-cutting concerns) như mở transaction, commit hay rollback.

  • spring data core annotations

    Spring Data có một loạt annotation như `@Id`, `@Query`, `@Repository`, `@Transient` để map class Java (entity) vào database và lo phần truy xuất dữ liệu. Nhờ chúng mà bớt được cả đống boilerplate: khai báo khoá chính, quan hệ giữa các bảng hay query tuỳ chỉnh đều gọn, dễ đọc, dễ bảo trì.

  • spring web bind annotations

    Spring Web Bind Annotations là nhóm annotation trong Spring MVC và Spring WebFlux, đóng vai trò cầu nối: tự lấy dữ liệu từ các phần của HTTP Request (URL, Body, Headers) rồi gán (bind) vào tham số của method trong Controller.

  • Spring IoC & Dependency Injection

    Mổ xẻ bên trong Spring IoC Container: DIP, IoC và DI khác nhau ra sao, vòng đời của một bean trong ApplicationContext, cách Spring gỡ circular dependency bằng cache 3 tầng (three-level cache), và vì sao field injection với @Autowired bị loại khỏi code enterprise.