Câu trả lời:
Spring được phát triển để thay thế cho EJB ngay từ khi mới thành lập, vì vậy câu trả lời là tất nhiên bạn có thể sử dụng Spring thay cho EJB.
Nếu có "lợi thế" khi sử dụng EJB, tôi muốn nói rằng điều đó sẽ phụ thuộc vào kỹ năng của đội bạn. Nếu bạn không có chuyên môn về Spring và có nhiều kinh nghiệm về EJB, thì có thể gắn bó với EJB 3.0 là một bước đi tốt.
Về lý thuyết, máy chủ ứng dụng được viết để hỗ trợ tiêu chuẩn EJB có thể được chuyển từ máy chủ ứng dụng Java EE tuân thủ này sang máy chủ ứng dụng Java EE tương thích. Nhưng điều đó có nghĩa là tránh xa bất kỳ và tất cả các tiện ích mở rộng dành riêng cho nhà cung cấp khóa bạn với một nhà cung cấp.
Dễ dàng chuyển các cổng Spring giữa các máy chủ ứng dụng (ví dụ: WebLogic, Tomcat, JBOSS, v.v.) vì nó không phụ thuộc vào chúng.
Tuy nhiên, bạn bị khóa vào Spring.
Spring khuyến khích các phương pháp thiết kế OO tốt (ví dụ: giao diện, lớp, tách các mối quan tâm) có lợi cho bất kỳ vấn đề nào họ chạm vào, ngay cả khi bạn quyết định chuyển sang Guice hoặc khung DI khác.
Cập nhật: Câu hỏi và câu trả lời này đã có năm tuổi vào năm 2014. Cần phải nói rằng thế giới lập trình và phát triển ứng dụng đã thay đổi rất nhiều trong thời gian đó.
Nó không chỉ là sự lựa chọn giữa Java hoặc C #, Spring hoặc EJB. Với vert.x , bạn có thể tránh hoàn toàn Java EE. Bạn có thể viết các ứng dụng đa ô, có khả năng mở rộng cao mà không cần máy chủ ứng dụng.
Cập nhật: Bây giờ là tháng 3 năm 2016. Spring Boot cung cấp một cách tốt hơn để viết ứng dụng mà không cần máy chủ ứng dụng Java EE. Bạn có thể tạo một JAR thực thi và chạy nó trên JVM.
Tôi tự hỏi liệu Oracle có tiếp tục hỗ trợ thông số kỹ thuật Java EE hay không. Các dịch vụ web đã tiếp quản cho các EJB. Giải pháp EJB đã chết. (Chỉ là ý kiến của tôi.)
Đầu tiên, hãy để tôi nói rõ ràng, tôi không nói rằng bạn không nên sử dụng Spring, nhưng vì bạn đang yêu cầu một số ưu điểm, đây là ít nhất hai trong số chúng:
EJB 3 là một tiêu chuẩn trong khi Spring thì không (đó là một tiêu chuẩn thực tế nhưng điều đó không giống nhau) và điều này sẽ không thay đổi trong tương lai gần. Mặc dù bạn có thể sử dụng Spring framework với bất kỳ máy chủ ứng dụng nào, các ứng dụng Spring bị khóa trong cả bản thân Spring và các dịch vụ cụ thể mà bạn chọn để tích hợp trong Spring.
Khung công tác Spring nằm trên các máy chủ ứng dụng và thư viện dịch vụ. Mã tích hợp dịch vụ (ví dụ: các mẫu truy cập dữ liệu) nằm trong khuôn khổ và được tiếp xúc với các nhà phát triển ứng dụng. Ngược lại, khung EJB 3 được tích hợp vào máy chủ ứng dụng và mã tích hợp dịch vụ được đóng gói sau một giao diện. Do đó, các nhà cung cấp EJB 3 có thể tối ưu hóa hiệu suất và trải nghiệm của nhà phát triển bằng cách làm việc ở cấp máy chủ ứng dụng. Ví dụ: họ có thể liên kết chặt chẽ công cụ JPA với quản lý giao dịch JTA. Một ví dụ khác là hỗ trợ phân cụm minh bạch đối với các nhà phát triển EJB 3.
Tuy nhiên, EJB 3 không phải là hoàn hảo, nó vẫn còn thiếu một số tính năng (ví dụ như tiêm các thành phần không được quản lý như POJO đơn giản).
Điểm của Pascal là hợp lệ. Tuy nhiên, có những điều sau đây có lợi cho mùa xuân.
Đặc tả EJB thực sự hơi lỏng lẻo, và do đó có thể quan sát thấy các hành vi khác nhau với các máy chủ ứng dụng khác nhau. Tất nhiên, điều này sẽ không đúng với hầu hết các trường hợp, nhưng tôi đã gặp vấn đề như vậy đối với một số "góc tối".
Spring có rất nhiều tính năng bổ sung, như tích hợp Spring-test, AOP, MVC, JSF, v.v. EJB có một số trong số đó (ví dụ: các bộ đánh chặn), nhưng theo tôi thì chúng không được phát triển nhiều.
Kết luận, nó phụ thuộc chủ yếu vào trường hợp chính xác của bạn.
EJBContainer.createEJBContainer()
API tiêu chuẩn để sử dụng một vùng chứa nhúng. Vì vậy, vẫn còn, tuyên bố của bạn là sai.
Spring là để bổ sung cho EJB, không phải để thay thế nó. Spring là một lớp trên EJB. Như chúng ta đã biết, việc viết mã EJB được thực hiện bằng cách sử dụng API, có nghĩa là chúng ta phải triển khai mọi thứ trong các API bằng cách sử dụng Spring framework. Chúng ta có thể tạo mã đĩa nồi hơi, sau đó chỉ cần lấy đĩa đó, thêm một số thứ vào nó, rồi mọi thứ đã xong. Bên trong Spring được kết nối với EJB - Spring sẽ không tồn tại nếu không có EJB.
Ưu điểm chính của việc sử dụng Spring là không có sự ghép nối nào giữa các lớp.