Khung mùa xuân làm gì? Tôi có nên sử dụng nó? Tại sao hay tại sao không?


237

Vì vậy, tôi đang bắt đầu một dự án hoàn toàn mới trong Java và đang xem xét sử dụng Spring. Tại sao tôi lại xem xét mùa xuân? Bởi vì nhiều người nói với tôi rằng tôi nên sử dụng Spring! Nghiêm túc mà nói, bất cứ khi nào tôi cố gắng khiến mọi người giải thích chính xác Spring là gì hoặc nó làm gì, họ không bao giờ có thể cho tôi một câu trả lời thẳng thắn. Tôi đã kiểm tra phần giới thiệu trên trang web SpringSource và chúng thực sự phức tạp hoặc tập trung vào hướng dẫn và không ai trong số chúng cho tôi biết lý do tại sao tôi nên sử dụng nó, hoặc làm thế nào để cuộc sống của tôi dễ dàng hơn. Đôi khi mọi người vấp phải thuật ngữ "tiêm phụ thuộc", điều này chỉ khiến tôi bối rối hơn nữa, bởi vì tôi nghĩ rằng tôi có một sự hiểu biết khác nhau về thuật ngữ đó có nghĩa là gì.

Dù sao, đây là một chút về nền tảng của tôi và ứng dụng của tôi:

Đã phát triển Java một thời gian, thực hiện phát triển web back-end. Vâng, tôi làm một tấn thử nghiệm đơn vị. Để tạo điều kiện cho điều này, tôi thường tạo (ít nhất) hai phiên bản của một phương thức: một phiên bản sử dụng các biến thể hiện và một phiên bản chỉ sử dụng các biến được truyền vào phương thức. Một biến sử dụng các biến đối tượng gọi một biến khác, cung cấp các biến thể hiện. Khi đến lúc kiểm tra đơn vị, tôi sử dụng Mockito để mô phỏng các đối tượng và sau đó thực hiện các cuộc gọi đến phương thức không sử dụng các biến thể hiện. Đây là những gì tôi luôn hiểu "tiêm phụ thuộc" là.

Ứng dụng của tôi khá đơn giản, từ góc độ CS. Dự án nhỏ, 1-2 nhà phát triển để bắt đầu. Chủ yếu là các hoạt động kiểu CRUD với một loạt các tìm kiếm được đưa vào. Về cơ bản là một loạt các dịch vụ web RESTful, cộng với một giao diện người dùng web và cuối cùng là một số máy khách di động. Tôi đang nghĩ đến việc làm phần đầu trong HTML / CSS / JS / JQuery thẳng, vì vậy không có kế hoạch thực sự nào để sử dụng JSP. Sử dụng Hibernate làm ORM và Jersey để triển khai các dịch vụ web.

Tôi đã bắt đầu viết mã và rất háo hức muốn có một bản demo ngoài đó để tôi có thể mua sắm xung quanh và xem có ai muốn đầu tư không. Vì vậy, rõ ràng thời gian là điều cốt yếu. Tôi hiểu rằng Spring có đường cong học tập khá tốt, cộng với có vẻ như nó cần cả một loạt cấu hình XML, mà tôi thường cố gắng tránh như bệnh dịch. Nhưng nếu nó có thể làm cho cuộc sống của tôi dễ dàng hơn và (đặc biệt) nếu làm cho nó có thể giúp phát triển và thử nghiệm nhanh hơn, tôi sẵn sàng cắn viên đạn và học Spring.

Vậy nên làm ơn. Giáo dục tôi. Có nên sử dụng Spring? Tại sao hay tại sao không?


10
Tôi nghĩ rằng bạn thực sự cần phải thử một lúc cho chính mình để xem nếu bạn thích nó và nếu nó phù hợp cho dự án của bạn. Cá nhân tôi ghét nó.
Richard

1
Trong khi bạn có thể sử dụng XML hoặc các chú thích; Hãy nhớ rằng Spring có một quy ước về tâm lý cấu hình. Đây không nhất thiết là một danh sách kiểm tra các mục bạn phải giải quyết.
Aaron McIver

14
Mặc dù đúng là câu hỏi này khá rộng, tôi nghĩ nó vẫn nên mở. Tôi đọc nó là "Mùa xuân mang lại lợi ích gì cho một dự án cỡ trung bình?", Và đó là một câu hỏi hay.
sleske

1
Tôi đặc biệt khuyên bạn nên đọc cuốn sách kỹ thuật yêu thích của mình: Spring in Action, Ấn bản thứ ba của Craig Walls. Đây là một bài đọc tuyệt vời và sẽ thay đổi cách bạn lập trình.
alfredaday

4
Xem xét Java doanh nghiệp, sẽ dễ dàng hơn để trả lời những gì Spring không làm ...
m3th0dman 10/03/2015

Câu trả lời:


108

Khung mùa xuân làm gì? Tôi có nên sử dụng nó? Tại sao hay tại sao không?

Spring là một khung giúp bạn "kết nối" các thành phần khác nhau lại với nhau. Nó hữu ích nhất trong trường hợp bạn có nhiều thành phần và bạn có thể quyết định kết hợp chúng theo nhiều cách khác nhau hoặc muốn giúp dễ dàng trao đổi một thành phần này cho một thành phần khác tùy thuộc vào các cài đặt hoặc môi trường khác nhau.

Đây là những gì tôi luôn hiểu "tiêm phụ thuộc" là.

Tôi muốn đề xuất một định nghĩa khác:

"Thiết kế các đối tượng của bạn để chúng dựa vào một lực lượng bên ngoài để cung cấp cho chúng những gì chúng cần, với mong muốn những phụ thuộc này luôn được tiêm trước khi bất cứ ai yêu cầu chúng bắt đầu làm những công việc thông thường của chúng."

So sánh điều đó với: "Mỗi đối tượng có trách nhiệm đi ra ngoài và tìm mọi thứ và mọi người nó cần khi nó khởi động."

có vẻ như nó đòi hỏi cả đống cấu hình XML

Chà, hầu hết các công cụ XML (hoặc dựa trên chú thích) đang nói với các công cụ Spring như:

  • Khi ai đó yêu cầu "HammerStore", tôi muốn bạn tạo một thể hiện example.HammerStorevà trả lại nó. Lưu trữ ví dụ cho lần tiếp theo, vì chỉ cần có một cửa hàng.
  • Khi ai đó yêu cầu "Một số máy khoan", tôi muốn bạn tự hỏi mình về "HammerStore" và trả lại kết quả của makeHammer()phương thức của cửa hàng . Đừng không bộ nhớ cache kết quả này.
  • Khi ai đó yêu cầu "Một số cờ lê", tôi muốn bạn tạo một thể hiện của example.WrenchImpl, Sử dụng cài đặt cấu hình gaugeAmountvà đặt nó vào thuộc tính của thể hiện setWrenchSize(). Không lưu trữ kết quả.
  • Khi ai đó yêu cầu "LocalPlumber", tôi muốn bạn tạo một thể hiện của example.PlumberImpl. Đặt chuỗi "Pedro" vào setName()phương thức của nó , đặt "Một số búa" vào setHammer()phương thức của nó và đặt "Một số cờ lê" vào setWrench()phương thức của nó . Trả về kết quả và lưu lại kết quả cho lần sau vì chúng ta chỉ cần một thợ sửa ống nước.

Theo cách này, Spring cho phép các thành phần kết nối của bạn, gắn nhãn cho chúng, kiểm soát vòng đời / bộ nhớ đệm của chúng và thay đổi hành vi dựa trên cấu hình.

Để tạo điều kiện cho [thử nghiệm] tôi thường tạo (ít nhất) hai phiên bản của một phương thức: một phiên bản sử dụng các biến thể hiện và một phiên bản chỉ sử dụng các biến được truyền vào phương thức.

Nghe có vẻ như rất nhiều chi phí cho tôi không có nhiều lợi ích cho tôi. Thay vào đó, làm cho các biến đối tượng của bạn có protectedhoặc mức độ hiển thị của gói và định vị các kiểm tra đơn vị bên trong cùng một com.mycompany.whatevergói. Bằng cách đó bạn có thể kiểm tra và thay đổi các biến thể hiện bất cứ khi nào bạn muốn trong quá trình thử nghiệm.


65

Đầu tiên, tiêm phụ thuộc là gì?

Đơn giản. Bạn có một lớp, nó có một trường riêng (được đặt thành null) và bạn khai báo một setter công khai cung cấp giá trị cho trường đó. Nói cách khác, sự phụ thuộc của lớp (trường) đang được chèn bởi một lớp bên ngoài (thông qua bộ setter). Đó là nó. Không có gì kỳ diệu.

Thứ hai, Spring có thể được sử dụng mà không cần XML (hoặc rất ít)

Nếu bạn lặn trong Spring 3.0.5.GA trở lên thì bạn có thể sử dụng hỗ trợ tiêm phụ thuộc từ JDK6 +. Điều này có nghĩa là bạn có thể kết nối các phụ thuộc bằng cách sử dụng @Component@Resourcechú thích.

Tại sao lại sử dụng Spring?

Rõ ràng, tiêm phụ thuộc thúc đẩy thử nghiệm đơn vị rất dễ dàng vì tất cả các lớp của bạn đều có setters cho các phụ thuộc quan trọng và chúng có thể dễ dàng bị chế giễu bằng cách sử dụng khung mô phỏng yêu thích của bạn để cung cấp hành vi cần thiết.

Ngoài ra, Spring cũng cung cấp rất nhiều mẫu hoạt động như các lớp cơ sở để sử dụng các công nghệ tiêu chuẩn JEE một cách dễ dàng để làm việc. Ví dụ, JdbcTemplate hoạt động tốt với JDBC, JpaTemplate làm những điều tốt với JPA, JmsTemplate làm cho JMS khá đơn giản. RestTemplate đơn giản là tuyệt vời trong sự đơn giản của nó. Ví dụ:

RestTemplate restTemplate = new RestTemplate();
MyJaxbObject o = restTemplate.getForObject("https://secure.example.org/results/{param1}?param2={param2}",MyJaxbObject.class,"1","2");

và bạn đã hoàn thành. Các tham số được chèn và bạn chỉ cần cung cấp các chú thích JAXB cho MyJaxbObject. Điều đó sẽ không mất chút thời gian nào nếu bạn tự động tạo chúng từ XSD bằng cách sử dụng plugin Maven JAXB. Lưu ý rằng không có sự phân vai nào diễn ra ở đó, và cũng không cần phải tuyên bố một nguyên soái. Tất cả đã được thực hiện cho bạn.

Tôi có thể hiểu mãi về những điều kỳ diệu của Mùa xuân, nhưng có lẽ điều tốt nhất nên làm là thử một mã đơn giản, nơi bạn cố gắng kết nối một dịch vụ web RESTful để bơm dữ liệu từ một DAO được tiêm hỗ trợ các giao dịch.


4
yeah RestTemplate là khá tuyệt vời. Tôi đã có 100 dòng mã mà tôi có thể vứt đi và thay thế bằng 2-3 dòng.
Kevin

11
Đối với nitpick: Dependency Injection cũng bao gồm cách tiếp cận dựa trên hàm tạo. Bạn không nhất thiết phải có setters.
Darien

28

Trước hết, sự hiểu biết của bạn về tiêm phụ thuộc không sai về cơ bản, nhưng hoàn toàn khác với ý nghĩa của hầu hết mọi người khi họ sử dụng thuật ngữ này. Những gì bạn mô tả là một cách khá kỳ lạ và độc đáo để đạt được khả năng kiểm tra. Tôi khuyên bạn nên tránh xa nó, vì các nhà phát triển khác sẽ khá bối rối với loại mã đó.

Việc tiêm phụ thuộc như thường được hiểu (và được thực hiện bởi Spring) có nghĩa là các phụ thuộc mà một lớp có (ví dụ Nguồn dữ liệu JDBC) không được chính lớp đó tìm nạp, nhưng được "chèn" bởi một thùng chứa khi cá thể được tạo. Vì vậy, bạn không có hai phiên bản của mọi phương thức sử dụng Nguồn dữ liệu; thay vào đó, bạn có một cấu hình tiêm phụ thuộc trong đó Nguồn dữ liệu "thực" được tiêm và một cấu hình nơi tiêm giả. Hoặc, nếu việc tiêm xảy ra thông qua hàm tạo hoặc getter, mã kiểm tra có thể thực hiện tiêm một cách rõ ràng.

Thứ hai, Spring không chỉ là tiêm phụ thuộc, mặc dù đó là chức năng cốt lõi của nó. Nó cũng cung cấp các giao dịch khai báo, lập lịch công việc, xác thực và một loạt các chức năng khác (bao gồm một khung web MVC hoàn chỉnh) mà bạn có thể cần. Có các khung công tác khác cung cấp cùng chức năng, nhưng khác với Spring, chỉ Java EE có tất cả chúng được tích hợp.


OP hiểu DI hoàn toàn rõ
Basilevs

19

Vì sao bạn muốn sử dụng Spring, Bạn có thể đọc nó trên http://www.wrox.com/WileyCDA/Section/Why-Use-the-Spring-Framework-.id-130098.html

Tóm tắt :

  • Các ứng dụng J2EE có xu hướng chứa quá nhiều mã "hệ thống ống nước". Nhiều đánh giá mã liên tục tiết lộ một tỷ lệ cao mã không làm gì cả: mã tra cứu JNDI, Chuyển đối tượng, thử / bắt các khối để thu thập và giải phóng tài nguyên JDBC. . . . Viết và duy trì mã hệ thống ống nước như vậy chứng tỏ sự hao hụt lớn đối với các tài nguyên nên tập trung vào lĩnh vực kinh doanh của ứng dụng.

  • Nhiều ứng dụng J2EE sử dụng mô hình đối tượng phân tán trong đó điều này không phù hợp. Đây là một trong những nguyên nhân chính của sự trùng lặp mã và mã quá mức. Nó cũng sai về mặt khái niệm trong nhiều trường hợp; các ứng dụng phân phối nội bộ phức tạp hơn các ứng dụng cùng vị trí và thường ít hoạt động hơn. Tất nhiên, nếu các yêu cầu kinh doanh của bạn chỉ ra một kiến ​​trúc phân tán, bạn cần triển khai một kiến ​​trúc phân tán và chấp nhận sự đánh đổi phát sinh (và Spring cung cấp các tính năng để trợ giúp trong các tình huống như vậy). Nhưng bạn không nên làm như vậy mà không có lý do thuyết phục.

  • Mô hình thành phần EJB rất phức tạp. EJB được hình thành như một cách giảm độ phức tạp khi triển khai logic nghiệp vụ trong các ứng dụng J2EE; nó đã không thành công trong mục tiêu này trong thực tế.

  • EJB bị lạm dụng. EJB về cơ bản được thiết kế cho các ứng dụng giao dịch, phân phối nội bộ. Trong khi gần như tất cả các ứng dụng không tầm thường là giao dịch, phân phối không nên được xây dựng trong mô hình thành phần cơ bản.

  • Trên thực tế, nhiều "mẫu thiết kế J2EE" không phải là mẫu thiết kế, mà là cách giải quyết cho những hạn chế về công nghệ. Việc lạm dụng phân phối và sử dụng các API phức tạp như EJB, đã tạo ra nhiều mẫu thiết kế đáng ngờ; điều quan trọng là kiểm tra những điều quan trọng này và tìm kiếm những cách tiếp cận đơn giản hơn, năng suất hơn.

  • Các ứng dụng J2EE khó kiểm tra đơn vị. API J2EE và đặc biệt là mô hình thành phần EJB đã được xác định trước khi chuyển động nhanh được thực hiện. Do đó, thiết kế của họ không tính đến việc thử nghiệm đơn vị dễ dàng. Thông qua cả API và hợp đồng ngầm, rất khó để kiểm tra các ứng dụng dựa trên EJB và nhiều API J2EE khác bên ngoài máy chủ ứng dụng. Tuy nhiên, kiểm tra đơn vị bên ngoài một máy chủ ứng dụng là điều cần thiết để đạt được phạm vi kiểm tra cao và để tái tạo nhiều tình huống lỗi, chẳng hạn như mất kết nối với cơ sở dữ liệu. Nó cũng rất quan trọng để đảm bảo rằng các thử nghiệm có thể được chạy nhanh chóng trong quá trình phát triển hoặc bảo trì, giảm thiểu thời gian không hiệu quả chờ đợi triển khai lại.

  • Một số công nghệ J2EE đơn giản đã thất bại. Kẻ phạm tội chính ở đây là các hạt thực thể, đã được chứng minh là ít tai hại cho năng suất và trong các hạn chế của chúng đối với việc định hướng đối tượng.


13

Trước đây, chúng tôi đã viết các ứng dụng và dịch vụ web đơn giản, hiệu quả, nhanh chóng bằng cách sử dụng chỉ các lõi Java, Servlets và JSP, html và xml, JDBC API. Nó đã đủ tốt rồi; JUnit là một công cụ tốt để kiểm tra. Chúng tôi nghỉ ngơi dễ dàng rằng mã của chúng tôi làm việc.

Hibernate xuất hiện để đơn giản hóa SQL và cho phép ánh xạ thực sự các bảng Cơ sở dữ liệu với các đối tượng Java, cho phép các mối quan hệ phân cấp được phản ánh trong Ánh xạ quan hệ đối tượng hoặc ORM như chúng ta gọi. Tôi yêu nó. Đặc biệt là chúng tôi không phải ánh xạ Kết quả trở lại vào một đối tượng hoặc kiểu dữ liệu Java.

Struts đã xuất hiện để thêm mẫu Trình điều khiển Chế độ xem Mô hình vào các ứng dụng Web của chúng tôi, thật tốt.

EJB là một chi phí quá lớn và nỗi đau và chú thích làm cho mã trông giống như vết xước của gà và bây giờ Spring đã xuất hiện trên những người vô tội. Nó chỉ có vẻ quá sức với tôi.

Ví dụ: bây giờ chúng tôi gói url jdbc đơn giản của chúng tôi, người dùng, chuyển vào jdbc.properies trước, sau đó vào thuộc tính ngủ đông thứ hai và sau đó vào Spring bean lần thứ ba!

So với tất cả những điều đó, hãy xem xét việc có một kết nối mà bạn cần nó thực sự đơn giản như được hiển thị bên dưới trong java thuần túy, đó là những gì chúng ta thực sự đang làm sau khi trải qua tất cả những thứ không khí nóng với Spring:

Connection connection = DriverManager.getConnection(url, user, pass);

Điều đó tự giải thích rằng đó là một vòng lớn và vòng tròn để làm một việc đơn giản nhanh chóng và dễ dàng mà không thực sự có lợi ích lớn nào khác. Nó giống như gói hàng tấn và hàng tấn giấy quà tặng xung quanh một món quà nhỏ xinh mà đó là tất cả những gì bạn thực sự giữ.

Một ví dụ khác là cập nhật hàng loạt. Với Spring, nó có liên quan đến khá nhiều lớp, giao diện trước khi bạn có thể sử dụng JdbcTemplate để thực hiện cập nhật hàng loạt. Với jdbc đơn giản, nó chỉ đơn giản là:

Statement statement = connection.createStatement();
statement.addBatch(sqlquery);
statement.executeBatch();

Không thể đơn giản hơn hoặc nhanh hơn thế.

Tôi không hỗ trợ khung này. Lấy làm tiếc. Ai trên trái đất muốn tiêm mỗi khi họ cần bất cứ điều gì?


6
mã đó đơn giản, nhưng việc xử lý chuyển mã của bạn được xác định ở đâu và làm thế nào để bạn kiểm tra nó? Cả hai điều được làm đơn giản hơn vào mùa xuân. Ngoài ra, mã java của bạn được liên kết trực tiếp với kết nối db, trừ khi bạn lưu trữ các url và mật khẩu kết nối bên ngoài, việc này cũng được thực hiện đơn giản hơn vào mùa xuân.
NimChimpsky

+1 cho câu trả lời này, để giải quyết nhận xét trên, người đàn ông sử dụng các mẫu thiết kế trọng lượng nhẹ (GOF) của riêng bạn, singleton để kết nối nhóm, một lớp proxy cung cấp sql (chuỗi) và giá trị (mảng) cho Đối tượng cơ sở dữ liệu (phương thức này , phụ thuộc vào phương thức http), dbobject xử lý nhóm kết nối, giao dịch, v.v. thực hiện truy vấn theo sau là phát hành. Một đối tượng sử dụng trong tất cả các mô-đun, không ai cần mã tấm nồi hơi quá mức. điểm thưởng với cài đặt thử nghiệm đơn vị trên lớp proxy và dbobject.
dùng2727195

Hãy xem Spring-Data-JPA! Chú thích một pojo thành một thực thể, triển khai giao diện và xác định chữ ký phương thức bằng cách sử dụng các tên hợp lý, chẳng hạn như find HammerByweight () và spring thực hiện các phương thức cho bạn, cung cấp cho bạn một kho lưu trữ có thể tiêm mà bạn có thể sử dụng trong tất cả các lớp điều khiển hoặc dịch vụ kinh doanh khác của mình .
mancini0

13

Khung mùa xuân làm gì?

Mùa xuân là như ngày nay không chỉ, những gì được gọi là một khung đơn giản, nó là một hệ sinh thái hoàn chỉnh.

Các chủ đề được bao phủ bởi hệ sinh thái mùa xuân:

  • Spring Framework (ví dụ: Dependency Injection, AOP ...)

  • Đám mây mùa xuân

  • Dữ liệu mùa xuân

  • Bảo mật mùa xuân

  • Mẻ xuân

  • Xã hội mùa xuân

Xem ở đây để được bảo hiểm đầy đủ của hệ sinh thái. Có thể chọn các dự án cherry, để bạn có thể sử dụng Google Guice cho DI và ví dụ: Spring Security để xử lý các việc liên quan đến bảo mật. YOu không phải mua vào toàn bộ hệ sinh thái.

Bản thân Spring-framework bao gồm ngày nay

  • Phụ thuộc tiêm

  • Lập trình hướng theo khía cạnh bao gồm quản lý giao dịch khai báo của Spring

  • Ứng dụng web Spring MVC và khung dịch vụ web RESTful

  • Hỗ trợ nền tảng cho JDBC, JPA, JMS

Nguồn spring.io

Nói chung, bạn có thể nói rằng Spring là một tập hợp các Mẫu và Thực tiễn được triển khai trong mã, có thể giúp cải thiện hoặc tăng tốc chu trình phát triển ứng dụng của bạn.

Đối với những gì nó (khung lõi) được biết đến nhiều nhất là khả năng của nó trong lĩnh vực tiêm phụ thuộc . Bản thân Spring có, cái được gọi là Inversion of control container hoặc IoC Container ngắn hoặc thậm chí ngắn hơn container (mà đôi khi "mùa xuân" được sử dụng đồng nghĩa).

Tiêm phụ thuộc là gì?

Nội dung phụ thuộc có nghĩa là, đối tượng của bạn nhận được mọi phụ thuộc vào các đối tượng khác thông qua cơ chế bên ngoài.

Nói rằng, bạn có một chiếc xe hơi, cách điển hình, nó được thực hiện là:

public class Car {

    Engine e;

    public Car() { 
        e = new Engine(); 
    }

}

Các đối tượng xe hơi phụ thuộc vào một động cơ. Vì động cơ được triển khai như một thành viên của xe hơi, nó không thể được hoán đổi, ví dụ như động cơ thử nghiệm.

Bây giờ tiêm phụ thuộc đi vào chơi:

public class Car {

    Engine e;

    public Car(Engine e) { 
        this.e = e; 
    }

}

Sau đó, bạn có thể chuyển đổi động cơ. Những gì bạn thấy ở trên được gọi là tiêm constructor . Có các loại khác như ví dụ setter -injection hoặc phương thức -injection. Spring giúp bạn điều này như thế nào? Spring cho phép nó đánh dấu các thành phần được tiêm chú thích @Autowiredvà tự động nối dây của đối tượng tiêm - có khả năng, thành phần bạn muốn tiêm có phụ thuộc chính nó. Thuốc tiêm - có thể nói - được đánh dấu thông qua@Component

public class Car {

    Engine e;

    @Autowired
    public Car(Engine e) { 
        this.e = e; 
    }

}

Nhưng đó chỉ là một trong nhiều tính năng mà Spring cung cấp.

Có nên sử dụng Spring? Tại sao hay tại sao không?

Vì mùa xuân không phải là rất khó khăn và cung cấp nhiều hỗ trợ bạn nên xem xét sử dụng mùa xuân. Đặc biệt đối với các dự án mới, Spring Boot rất hấp dẫn. start.spring.io cung cấp một cách dễ dàng sử dụng point'n'click -interface để tạo mẫu dự án để bắt đầu. Thậm chí có thể sử dụng curlđể lấy mẫu:

curl start.spring.io

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/

:: Spring Initializr ::  https://start.spring.io

This service generates quickstart projects that can be easily customized.
Possible customizations include a project's dependencies, Java version, and
build system or build structure. See below for further details.

The services uses a HAL based hypermedia format to expose a set of resources
to interact with. If you access this root resource requesting application/json
as media type the response will contain the following links:
+-----------------+-----------------------------------------+
| Rel             | Description                             |
+-----------------+-----------------------------------------+
| gradle-build    | Generate a Gradle build file            |
| gradle-project  | Generate a Gradle based project archive |
| maven-build     | Generate a Maven pom.xml                |
| maven-project * | Generate a Maven based project archive  |
+-----------------+-----------------------------------------+

...

Mặt khác, các khung như tia lửa hoặc dropwizard cung cấp một điểm khởi đầu tốt để tạo ứng dụng web nhanh chóng.


1
Câu trả lời rất nhiều thông tin!
GOXR3PLUS

Đồng ý, trả lời rất tốt. OP, tôi thông cảm với bạn. Tôi cũng đã có một vài người chỉ cho tôi các bản demo mùa xuân nơi họ "đơn giản hóa" mã bằng cách thêm một tệp XML và 2 lớp cảm ứng để họ có thể gọi hàm tạo trên một lớp :) Bạn thực sự chỉ cần lặn hoặc đi đến một trình bày thực sự tốt và cuối cùng nó sẽ trở nên rõ ràng về lợi ích và nhược điểm là gì
Adam Hughes

4

Đó là một khung được viết bằng Java với rất nhiều thứ được bao gồm để làm cho ứng dụng web của bạn hoạt động (ví dụ: hỗ trợ quốc tế hóa). Nó cũng cung cấp một cách tốt để cấu trúc ứng dụng của bạn thành các lớp. Sử dụng nó, nó sẽ giúp bạn tiết kiệm rất nhiều thời gian trong thời gian dài.

Một cuốn sách hay để tìm hiểu về Spring là: Expert Spring MVC và Web Flow

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.