it-swarm-vi.com

Tại sao không phải là khung mùa xuân?

Có bất kỳ nhược điểm nào trong việc buộc ứng dụng của tôi vào khung công tác Spring không?

Tôi không nói về các lỗi hoặc vấn đề như vậy, nếu có. Tôi đang nói về những thứ kiến ​​trúc, chiến lược sẽ ảnh hưởng đến vòng đời ứng dụng của tôi.

Tôi có nên thích Spring hơn Java Các tính năng cốt lõi của EE được hỗ trợ bởi vùng chứa EE không? Ưu điểm là gì?

43
Mykhaylo Adamovych

Vì các bài đăng khác ở đây đề cập đến mặt trái, tôi sẽ đề cập đến các khía cạnh tiêu cực của Mùa xuân. Ngay cả với những tiêu cực này, Spring vẫn có mặt khắp nơi trong thị trường ngách, đáng tin cậy và hoạt động như quảng cáo.

Vì vậy, về những tiêu cực:

  • Rất nhiều: Tôi không muốn đặt những chiếc lọ với 3000 lớp vào dự án sở thích nhỏ của mình.

  • Có một số mô tả về nó chậm hơn một số khung DI khác như Guice hoặc Pico. giai thoại, và có lẽ không quá quan trọng.

  • Đối phó với một số phần của mùa xuân có thể gây khó chịu khi chúng không được ghi chép tốt các phần của lõi và tài liệu mà bạn tìm thấy sự phân kỳ trên nhiều phiên bản chính.

Như một tác dụng phụ của kích thước của nó, hãy sẵn sàng dành hàng giờ vui vẻ để đào bới hàng đống lớp mà được đặt tên một cách hợp lý, bắt đầu hợp nhất với nhau thành một đống danh từ khổng lồ khi bạn mệt mỏi ("chắc chắn, bạn chỉ cần kết nối TransactionAwareConnectionFactoryProxy của bạn UserCredentialsConnectionFactoryAdOG đến .. zzzzzzzz của bạn "). Công bằng mà nói, chúng thực sự được đặt tên một cách hợp lý, đó là một phản ứng hợp lý với kích thước của khung, nhưng vẫn còn.

Có thể là kết quả của sự thích nghi của các mảnh mới, mùa xuân có thể chậm, ít nhất là đối với tôi. Không quá nhiều với mùa xuân cốt lõi, nhưng có những kết nối cho tất cả mọi thứ, và chúng không phải là tài liệu tốt như họ có thể, và đó là khi bạn bắt đầu lội qua súp danh từ. Một lần nữa, đó thực sự là tất cả chỉ để đáp ứng với kích thước của nó.

42
Steve B.

Có rất ít nhược điểm cho mùa xuân

Tôi đã suy nghĩ rất lâu để tìm ra bất kỳ nhược điểm nghiêm trọng nào khi sử dụng Spring và tôi sợ rằng mình đã thất bại. Spring là một bộ công cụ tuyệt vời trong các mô hình JEE/OSGi. Nó cung cấp một loạt các mẫu không xâm lấn giúp đơn giản hóa đáng kể khi làm việc với các API hỗ trợ thường cồng kềnh được cung cấp bởi các thùng chứa ứng dụng.

Mùa xuân so với JEE cốt lõi

Spring không thay thế các công nghệ JEE cốt lõi - cũng có thể là EJB nhưng với đặc tả EJB3 mới, hầu như không có gì trong đó - thay vào đó, nó cung cấp các mẫu để sử dụng chúng dễ dàng hơn nhiều. Hãy xem xét JAX-RS API dịch vụ web RESTful. Spring cung cấp RestTemplate thường được sử dụng như sau (giả sử nó được tiêm):

SomeJaxbAnnotatedClass object = restTemplate.getForObject(someURI,SomeJaxbAnnotatedClass.class);

Điều này sẽ chuyển sang someURI lấy XML/JSON/YAML và sắp xếp nó vào đối tượng miền mà bạn chỉ định. Tất cả trong một dòng mã.

Các ngoại lệ và ghi nhật ký lỗi được xử lý như các ngoại lệ thời gian chạy giúp cho việc giữ mã cục bộ dễ dàng hơn. Spring thậm chí hoạt động để giảm các phụ thuộc bên ngoài bất cứ khi nào có thể, vì vậy ví dụ trên chỉ sử dụng các gói Java.net. *).

Có các mẫu cho JMS, JAX-WS, JPA, JTA và trên và trên. Tất cả chúng làm cho nó nhiều dễ dàng hơn để làm việc với các tiêu chuẩn này và làm cho mã của bạn sạch hơn và ít bị lỗi hơn.

Kiến trúc Pick'n'mix

Từ quan điểm kiến ​​trúc, Spring nhấn mạnh cách tiếp cận nhẹ nhàng. Điều này có tác dụng cho phép các kiến ​​trúc sư hệ thống tránh sử dụng các thùng chứa ứng dụng dành cho tất cả mọi người cồng kềnh như WebSphere, JBoss hoặc Glassfish và chọn các đối tác nhẹ của họ - Jetty, Tomcat, v.v.

Sao nó lại quan trọng? Các thùng chứa ứng dụng lớn hơn có chu kỳ cập nhật dài hơn nhiều, phù hợp với nhu cầu của một số khách hàng hơn những khách hàng khác. Các ngân hàng không cần phải nhanh nhẹn như một người đàn ông khởi nghiệp.

Nếu bạn muốn sử dụng verson mới nhất của các khung hỗ trợ thì bạn không thể tìm thấy chúng trong các thùng chứa ứng dụng lớn. Thay vào đó, bạn sẽ cần bao gồm chúng một cách thủ công và Spring làm cho điều này trở nên dễ dàng.

Ngoài ra, bạn chỉ cần bao gồm cụ thể các công nghệ bạn cần. Các thùng chứa ứng dụng sẽ cung cấp cho bạn JMS, EJB và mọi từ viết tắt khác dưới Mặt trời, nhưng bạn chỉ muốn kiên trì dễ dàng với JPA. Bao gồm Spring và Hibernate và bạn đã hoàn thành.

Vậy tại sao không phải là mùa xuân?

Tránh Spring nếu bạn muốn đi cùng với việc triển khai các thư viện dành riêng cho nhà cung cấp. Ngoài ra, tránh nó nếu bạn muốn giữ chi tiết cấu hình của mình trong các lớp thay vì đưa chúng vào XML hoặc JNDI. Và chắc chắn tránh nó nếu bạn nghĩ rằng các giải pháp nguồn mở và miễn phí không phù hợp với môi trường của bạn.

9
Gary Rowe

một điều thú vị mà Martin Thompson đề cập đến trong bài viết này là mùa xuân có thể có tác động không hề nhỏ đến thời gian của GC:

Giữ ngăn xếp cuộc gọi nhỏ hợp lý. Vẫn còn nhiều việc phải làm ở đây. Nếu bạn đủ điên để sử dụng Spring, thì hãy kiểm tra ngăn xếp cuộc gọi của bạn để xem ý tôi là gì! Người thu gom rác phải đi bộ tìm những đồ vật có thể tiếp cận. -Martin Thompson

Loại điều này sẽ không phải là một vấn đề lớn đối với hầu hết các loại ứng dụng, nhưng đó là mối quan tâm rất thực sự đối với các loại ứng dụng mà Martin đang đề cập.

5
Paul Sanwald

Mùa xuân thực sự là tốt. Lõi xuân vẫn ổn. Tôi sẽ thêm vào các điểm khác, nếu bạn nằm trong danh mục thích hợp mà hiệu suất thực sự là mối quan tâm, bạn sẽ muốn tránh các mô-đun Spring khác, chỉ khi bạn nằm trong tay các nhà phát triển hàng đầu. Đây chỉ là một mối quan tâm nếu bạn đang chạy một hệ thống mà hiệu suất thực sự quan trọng. Trong tay của các nhà phát triển trung bình đến giỏi, Spring có thể sẽ thực sự giúp bạn tăng hiệu suất bằng cách giúp viết mã sạch đơn giản.

3
jasonk

Spring cố gắng hết sức để không xâm lấn về mặt giữ cho nó được ghép lỏng lẻo từ mã ứng dụng của bạn.

Nó cũng di chuyển nhiều hơn theo hướng đó trên tiem. Trong các phiên bản trước, bạn cần mở rộng các lớp cơ sở, sau đó nó chuyển sang chú thích và ngày nay, nó ngày càng sử dụng nhiều POJO được cấu hình trong XML.

Đây là một lợi ích chiến lược rất lớn so với các khung ứng dụng khác.

1
Benjamin Wootton

Mùa xuân về cơ bản đã trở thành một phần của nền tảng. Ở mọi nơi trong JEE5 và 6 bạn tìm thấy ngày càng nhiều tài nguyên hơn, do đó, ít nhất là một phần của Spring, nếu bạn gắn bó với nó, sẽ/sẽ chỉ là một phần khác của nền tảng, (xem @Inject). Các phần khác ... không chắc chắn lắm, đặc biệt là khi nói đến lập trình hướng theo khía cạnh. Có những nhà cung cấp khác của các dịch vụ đó, Guice, ban đầu từ Google và Weld, từ JBoss, tôi tin rằng được xây dựng trên Guice, sẽ cung cấp chức năng tương tự nếu bạn tuân thủ phụ thuộc vào JSR-330 Java thông số kỹ thuật tiêm.

YMMV

1
mezmo