Sử dụng các cấu hình <context:annotation-config> và <mvc:annotation-driven> trong Spring

Trong hệ thống cấu hình của Spring, hai cấu hình này đóng vai trò quan trọng. Cụ thể hơn, theo schema của các thẻ, mvc chủ yếu phục vụ cho Spring MVC, cung cấp khả năng chuyển tiếp yêu cầu Controller và tự động chuyển đổi JSON. Trong khi đó, context tập trung vào việc giải quyết một số chú thích (annotations) liên quan đến container Spring.

<context:annotation-config>

Sử dụng thẻ này sẽ đăng ký bốn BeanPostProcessor sau vào container Spring:

  1. Tự động phát hiện và xử lý @Autowired - AutoInjectBeanHandler
  2. Hỗ trợ các chú thích chung như @Resource - CommonAnnotationHandler
  3. Xử lý các chú thích liên quan đến persistence - PersistenceAnnotationHandler
  4. Xác định các trường bắt buộc - MandatoryFieldChecker
<bean class="org.springframework.beans.factory.annotation.AutowiredBeanHandler"/>
    

Nếu sử dụng các chú thích như @Autowired hoặc @Resource thường xuyên, việc cấu hình từng bean theo cách thủ công có thể trở nên rườm rà. Do đó, Spring cung cấp thẻ <context:annotation-config/> để đơn giản hóa quá trình, đồng thời tự động tìm kiếm các lớp được đánh dấu bằng @Component, @Controller, @Service, @Repository.

<context:component-scan/>

  • Có thể chỉ định đường dẫn quét gói (base package).
  • Thuộc tính useDefaultFilters mặc định là true, nghĩa là Spring sẽ tự động phát hiện các lớp được đánh dấu bởi @Component, @Repository, @Service, @Controller và đăng ký chúng vào container. Để kiểm soát chính xác những gì cần quét, hãy vô hiệu hóa hành vi mặc định (set useDefaultFilters=false).
  • Khi sử dụng <context:component-scan/>, không cần phải thêm <context:annotation-config/> nữa.
<!-- Chỉ quét các Controller mà không quét các bean khác -->
<context:component-scan base-package="com.example.demo" use-default-filters="false">
  <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
    

<mvc:annotation-driven/>

Là một dạng viết tắt, giúp người mới học nhanh chóng áp dụng cấu hình mặc định. Khi cấu hình <mvc:annotation-driven/>, Spring sẽ tự động đăng ký các bean sau để xử lý yêu cầu:

  • RequestMappingBinder: Xử lý các chú thích @RequestMapping và đăng ký chúng vào bảng ánh xạ yêu cầu.
  • RequestAdapterManager: Quản lý việc gọi đúng phương thức trong lớp nào và xây dựng tham số đầu vào cũng như giá trị trả về.

Điều này rất cần thiết để phân phối yêu cầu tới các Controller trong Spring MVC. Nó còn hỗ trợ: ràng buộc dữ liệu, chú thích định dạng ngày giờ, hỗ trợ XML và JSON.

Thẻ: Spring MVC Java annotations DependencyInjection

Đăng vào ngày 15 tháng 6 lúc 22:34