Tôi nghĩ tôi có thể giải quyết vấn đề, mặc dù tôi không chắc chắn rằng mọi câu trả lời đều thỏa đáng.
Câu trả lời đơn giản là mùa xuân là sự kết hợp của công nghệ:
- dependency injection, trong đó sử dụng các nguyên tắc Hollywood để giúp bạn giữ cho giao diện và thực hiện riêng biệt;
- lập trình hướng khía cạnh, cách ly mối quan tâm cắt chéo thành các mô-đun mà bạn có thể áp dụng theo cách khai báo. "Xin chào thế giới" của AOP đang đăng nhập, nhưng tất cả đều trên Spring (ví dụ: giao dịch, proxy động để truy cập từ xa, bảo mật, v.v.) Hãy suy nghĩ các bộ lọc servlet và bạn sẽ có ý tưởng;
- thư viện để trợ giúp các tác vụ phổ biến như kiên trì (JDBC, Hibernate, iBatis, JDO, JPA, v.v.), từ xa (RMI, HTTP, dịch vụ web), nhắn tin asynch (POJOs thông báo), xác thực và ràng buộc, web MVC (Spring or Struts), các tiện ích như email, lên lịch, bảo mật, v.v.
Nhưng câu trả lời sâu hơn là bạn đang nhận được lợi ích từ kinh nghiệm của Rod Johnson với tư cách là nhà tư vấn về các dự án Java EE. Anh ta chưng cất những gì đã làm việc cho anh ấy trên các hợp đồng biểu diễn của anh ấy vào Giao diện 21/Mùa xuân, và bây giờ bạn có thể có được lợi ích của tất cả những điều đó miễn phí.
Nhóm Spring viết mã được thiết kế, kiểm tra và tuân theo các tiêu chuẩn nghiêm ngặt hơn bất kỳ thứ gì tôi từng viết. (Hãy tưởng tượng Juergen Hoeller browbeating Rod Johnson vì mã của anh ấy không đáp ứng được tiêu chuẩn trước khi check-in.) Tôi có thể dựa vào mã khung của họ khi tôi sử dụng nó và tập trung vào vấn đề kinh doanh của tôi. Tôi không viết mã tấm nồi hơi một lần nữa và một lần nữa.
Đối với tôi, Spring là nhiều hơn về mẫu kiến trúc hoạt động như một hướng dẫn để tạo ứng dụng web.Một số người có thể nói rằng nó được thiết kế quá mức, và đối với một số vấn đề họ đúng, nhưng đối với loại vấn đề mà tôi phải đối mặt với một cách thường xuyên Mùa xuân chỉ là vé.
Đối với subquestions:
gì chúng tôi có lợi thế khi sử dụng khuôn khổ dependency injection?
Đối tượng không phải chịu trách nhiệm quản lý phụ thuộc của họ. Bối cảnh ứng dụng của mùa xuân thực sự chỉ là một mô hình nhà máy lớn từ GoF. Nó khuyến khích bạn thiết kế một giao diện để bạn có thể thay đổi việc triển khai khi cần thiết. Giao diện kiên trì của bạn có thể sử dụng một thực hiện JDBC ngày hôm nay, Hibernate vào ngày mai; bạn có thể quyết định tự động tạo proxy để quản lý hành vi giao dịch của nó. Không có mã khách hàng nào phải thay đổi nếu bạn mã hóa vào một giao diện.
Ý tưởng mô tả các lớp có giá trị setter và/hoặc tham số hàm tạo có vẻ lạ đối với tôi. Tại sao vậy? Bởi vì chúng ta có thể thay đổi các thuộc tính mà không biên dịch lại dự án ? Đó là tất cả những gì chúng ta đạt được?
Lạ? Bạn không sử dụng các thuộc tính hoặc các hàm tạo trong mã của bạn? Bạn làm điều đó bởi vì đó là cách hầu hết các lớp Java được viết. Spring chỉ sử dụng những cơ chế đó như một cách để cung cấp sự phụ thuộc cho lớp.
Sau đó, chúng ta nên mô tả những đối tượng nào trong beans.xml? Tất cả các đối tượng hoặc chỉ một vài?
Chỉ những hạt có phụ thuộc. Tôi vẫn gọi "mới" cho các đối tượng địa phương cho một phương pháp cụ thể. Chúng được tạo, sử dụng và thu thập rác trong phạm vi phương thức. Những nhu cầu đó không thuộc sự kiểm soát của Spring.
Sau đó, những gì bạn đang tìm kiếm là một bài viết về vấn đề chứ không phải là câu trả lời SO. – Bozho
Tôi không tìm kiếm một bài viết về vấn đề AS I ALREADY TRIỂN SÁCH TỐT NHẤT được xuất bản về chủ đề này. Tôi muốn biết ý kiến của những người sử dụng nó trong công việc hàng ngày. – EugeneP
Vâng, nó hoạt động. –