CDI là viết tắt của "bối cảnh và tiêm phụ thuộc", trong khi mùa xuân là một hệ sinh thái hoàn chỉnh xung quanh một container tiêm phụ thuộc. Để so sánh cả hai, bạn phải phân biệt so sánh.
Tiêm phụ thuộc được xử lý bởi cả hai vùng chứa. Điểm khác biệt chính là CDI xử lý DI theo cách động (còn gọi là: trạng thái) - điều này có nghĩa là các phụ thuộc được giải quyết tại thời gian thực hiện. Cách tiếp cận của Spring là static - điều này có nghĩa là các thành phần được kết nối với nhau tại thời gian tạo. Mặc dù cách CDI có vẻ hơi khác thường ở cái nhìn đầu tiên, nó vượt trội hơn rất nhiều và cung cấp các tùy chọn nâng cao hơn (tôi viết bài này với nền của hai ứng dụng CDI hiệu quả).
Nếu bạn nhìn vào các hệ sinh thái , tình hình là khác nhau: Mùa xuân đi kèm với rất nhiều lọ (> 150), trong khi CDI là khá nhỏ của chính nó. Một điển hình sử dụng CDI sẽ nằm bên trong một máy chủ ứng dụng Java EE 6, nhưng bạn có thể dễ dàng làm cho nó hoạt động trong một công cụ servlet hoặc thậm chí là Java SE. Điều này có nghĩa là việc sử dụng CDI sẽ không đưa ra giả định về việc sử dụng Hibernate, JPA, EJB hay bất kỳ thứ gì - tùy thuộc vào bạn.
Nếu bạn cần thêm chức năng, CDI đi kèm với khái niệm về các tiện ích mở rộng di động (tự nó làm cho API đáng giá). Các mô-đun mở rộng độc lập như Apache CODI và Seam 3 tồn tại và bao gồm các chủ đề như bảo mật, gửi thư, báo cáo và hơn thế nữa.
Để tóm tắt: CDI không giống như "thay thế" cho hệ sinh thái mùa xuân, nó đúng hơn là một cải tiến so với cơ chế tiêm phụ thuộc của Spring. Đó là một phần của Java EE 6, vì vậy nếu bạn đang sử dụng GlasFish với Java EE 6, bạn chắc chắn nên đi CDI. Trong mắt tôi, câu hỏi của bạn là khá: Tôi có thể thay thế Spring bằng Java EE 6 không? Tôi đoán câu trả lời của tôi là khá rõ ràng ;-)
Có một cái nhìn tại Weld để có được một sự khởi đầu tốt ...
Nguồn
2011-05-12 06:28:59
Xem thêm https://dzone.com/articles/cdi-10-vs-spring-31-feature – GKislin