Spring MVC FAQ: Phân biệt sự khác nhau giữa component-scan, annotation-config, annotation-driven.
Khi cấu hình file spring config .xml bạn thấy lúc thì sử dụng component-scan, lúc thì dùng annotation-config, annotation-driven.
Ở bài này mình sẽ phân biệt các config này.
context:annotation-config
<context:annotation-config>
: Dùng để scan và active (tìm và kích hoạt) các annotation bên trong các bean đã được đăng ký trong application context
Nó hỗ trợ sử lý các annotation @Autowired, @Qualifier, @Resource, @PostConstruct, @Predestroy cho các bean đã được tạo và lưu trong Spring Container.
context:component-scan
<context:component-scan>
cũng hộ trợ tất cả nhưng gì mà <context:annotation-config>
thực hiện. Ngoài ra <context:component-scan>
còn hỗ trợ scan các package để tìm và đăng ký các bean vào appplication context.
Do đó, <context:component-scan> sẽ hỗ trợ xử lý các annotation @Component, @Repository, @Controller, @Bean, @Service…
Ví dụ: <context:component-scan base-package=”stackjava.com.springmvchello” /> sẽ scan tất cả các class trong package stackjava.com.springmvchello để tìm những class được đánh dấu annotation @Component, @Repository, @Controller, @Service đăng ký bean cho nó, xử lý các annotation bên trong các bean này.
Nếu bạn đã sử dụng <context:component-scan> thì không cần thiết phải dùng đến <context:annotation-config> nữa.
mvc:annotation-driven
mvc:annotation-driven
được sử dụng để kích hoạt các thành phần Spring MVC với cấu hình mặc định của nó. (chỉ dùng trong Spring MVC)
Ứng dụng của bạn vẫn sẽ chạy nếu không khai báo <mvc:annotation-driven />.
Tuy nhiên bạn bắt buộc phải dùng <mvc:annotation-driven /> nếu muốn sử dụng @Valid, @Validate, @ControllerAdvice để validate cho các form, hay khi sử dụng để xử lý json, xml (@ResponseBody, @RestController…) khi trả về…
Phân biệt sự khác nhau giữa component-scan, annotation-config, annotation-driven stackjava.com
References:
https://stackoverflow.com/…difference-between-mvcannotation-driven-and-contextannotation