ความแตกต่างระหว่าง Spring MVC และ Spring Boot


234

ฉันเพิ่งเริ่มเรียนรู้ฤดูใบไม้ผลิ ในขั้นตอนต่อไปของฉันฉันต้องการพัฒนาเว็บแอปพลิเคชันให้ใหญ่ขึ้น

ตอนนี้ฉันสงสัยว่าฉันควรเริ่มต้นด้วย Spring Boot หรือ Spring MVC ฉันได้อ่านบางสิ่งแล้ว แต่มันก็สับสนเพราะทั้งคู่ดูเหมือนกัน

ดังนั้นความแตกต่างระหว่างสองคืออะไร

คำตอบ:


320
  • Spring MVCเป็นเฟรมเวิร์ก MVC เชิง HTTP ที่สมบูรณ์ซึ่งจัดการโดย Spring Framework และอยู่ใน Servlets มันจะเทียบเท่ากับ JSF ใน JavaEE stack องค์ประกอบที่ได้รับความนิยมมากที่สุดคือคลาสที่มีคำอธิบายประกอบโดย@Controllerที่คุณใช้วิธีการที่คุณสามารถเข้าถึงได้โดยใช้คำขอ HTTP ที่แตกต่างกัน มันเทียบเท่า@RestControllerกับการใช้ API ที่ใช้ REST
  • Spring bootเป็นเครื่องมือสำหรับการตั้งค่าแอปพลิเคชันอย่างรวดเร็วโดยนำเสนอการกำหนดค่านอกกรอบเพื่อสร้างแอปพลิเคชั่นที่ใช้สปริง ในขณะที่คุณอาจจะรู้ว่าฤดูใบไม้ผลิบูรณาการที่หลากหลายของโมดูลที่แตกต่างกันภายใต้ร่มของมันเป็นฤดูใบไม้ผลิ-core , ฤดูใบไม้ผลิข้อมูล , ฤดูใบไม้ผลิเว็บ (ซึ่งรวมถึงฤดูใบไม้ผลิ MVC โดยวิธีการ) และอื่น ๆ ด้วยเครื่องมือนี้คุณสามารถบอก Spring ถึงจำนวนการใช้และคุณจะได้รับการตั้งค่าที่รวดเร็วสำหรับพวกเขา (คุณได้รับอนุญาตให้เปลี่ยนได้ด้วยตัวเองในภายหลัง)

ดังนั้น Spring MVC จึงเป็นเฟรมเวิร์กที่จะใช้ในเว็บแอปพลิเคชั่นและ Spring Boot เป็นตัวเริ่มต้นของโปรเจ็กต์ที่พร้อมใช้งานในฤดูใบไม้ผลิ คุณอาจพบว่ามีประโยชน์ในการเยี่ยมชมวิกิแท็ก Spring MVCรวมถึงวิกิแท็ก Spring Bootใน SO


29
ใช่ _ + 1, การบู๊ตฤดูใบไม้ผลิเป็นเพียงเครื่องมือการกำหนดค่าอัตโนมัติ (บรรจุเป็นกรอบ) Spring mvc เป็นเฟรมเวิร์กของเว็บ
Plain_Dude_Sleeping_Alone

2
นั่นหมายความว่า Spring Boot ใช้เพื่อแสดงหน้ามุมมอง (HTML) สำหรับตัวควบคุมการส่งคืนและโพสต์ JSON เท่านั้นและหากฉันต้องการใช้มุมมองเพื่อแสดง HTML ฉันต้องใช้ Spring MVC หรือไม่
Osama Al-Banna

2
@ OsamaAl-Banna Spring MVC เป็นเทคโนโลยีมุมมองเลเยอร์โดยทั่วไปจะจัดการคำขอ HTTP ตอบกลับทำหน้าที่เป็นตัวควบคุม (สำหรับ HTML คุณสามารถรวมเข้ากับ thymeleaf ตัวอย่างเช่นสำหรับ REST + JSON ใช้มันตามที่เป็นเพราะ การแปลง JSON นั้นทำกับ Jackson รวม) Spring Boot รวมโครงการ Spring ทั้งร่ม (MVC + Data + Core ... ) และให้การกำหนดค่าที่พร้อมใช้งานอย่างรวดเร็วเพื่อการผลิต
Xtreme Biker

3
นี่หมายความว่าฉันสามารถกำหนดค่าแอปพลิเคชันเว็บด้วยSpring Bootการใช้งานเว็บได้ตามความต้องการSpring MVCหรือไม่
Mike

1
@ ไมค์แน่ใจว่ามันทำ
Xtreme Biker

105

Spring MVCและSpring Boot ได้รับการอธิบายอย่างดีในคำตอบอื่น ๆ ดังนั้นโดยไม่ต้องทำซ้ำผมขอกระโดดข้ามไปที่เฉพาะเจาะจง Spring BootและSpring MVCไม่สามารถเปรียบเทียบกันได้หรือไม่เหมือนกัน หากคุณต้องการพัฒนาเว็บแอปพลิเคชั่นโดยใช้ Spring คุณจะต้องใช้Spring MVCอยู่ดี คำถามของคุณจะกลายเป็นว่าจะใช้Spring Bootหรือไม่

สำหรับการพัฒนาแอพพลิเคชั่น Spring ทั่วไปหรือเริ่มเรียนรู้ Spring ฉันคิดว่าจะแนะนำให้ใช้Spring Boot มันทำให้งานง่ายขึ้นมากพร้อมสำหรับการผลิตและมีการนำไปใช้อย่างรวดเร็ว

บางครั้งฉันเคยเห็นผู้เริ่มต้นถามคำถามนี้เพราะใน STS (Spring Tool Suite) มีวิซาร์ดสองตัว: อันหนึ่งสำหรับการสร้างโปรเจ็กต์ Spring Boot และอีกอันสำหรับการสร้างโปรเจ็ค Spring MVC ดังนั้นคำแนะนำของฉันคือการสร้างโครงการ Spring Boot และเลือกเว็บเป็นโมดูลในนั้น


1
เมื่อคุณใช้ spring-boot (พร้อม spring-data-rest และ spring-web) คุณมีหลักการ MVC ที่นี่ใช่ไหม? ฉันสับสนเพราะฉันคิดว่า Spring MVC เป็นรุ่น Spring เดียวที่ใช้ MVC-Model
watchme

5
spring-web ไม่มีอะไรนอกจากโมดูล spring-mvc
Sanjay


23

ในระยะสั้นมันอาจกล่าวได้ว่า:

Spring boot = Spring MVC + Auto Configuration(Don't need to write spring.xml file for configurations) + Server(You can have embedded Tomcat, Netty, Jetty server).

และ Spring Boot เป็นเฟรมเวิร์กตามความคิดเห็นดังนั้นการสร้างโดยคำนึงถึงการพัฒนาที่รวดเร็วใช้เวลาน้อยกว่าในการกำหนดค่าและมีการสนับสนุนชุมชนที่ดีมาก


19

Spring MVCเป็นโครงการย่อยของ Spring Framework กำหนดเป้าหมายการออกแบบและพัฒนาแอพพลิเคชั่นที่ใช้รูปแบบ MVC (Model-View-Controller) Spring MVC ได้รับการออกแบบมาเพื่อรวมเข้ากับ Spring Framework และโครงการย่อยอื่น ๆ

Spring Bootสามารถเข้าใจได้ค่อนข้างดีจากบทความนี้โดยทีมงาน Spring Engineering มันมีความเห็นตามที่คาดคะเนนั่นคือมันสนับสนุนรูปแบบการพัฒนาที่รวดเร็ว แต่มันถูกออกแบบมาอย่างดีพอที่จะรองรับข้อยกเว้นของกฎถ้าคุณต้องการ กล่าวโดยสรุปก็คือการประชุมเกี่ยวกับวิธีการกำหนดค่าที่ยินดีที่จะเข้าใจความต้องการของคุณที่จะทำลายการประชุมเมื่อได้รับการรับประกัน


17

นี่คือบางประเด็นหลักที่แตกต่าง Spring, Spring MVC และ Spring Boot:

ฤดูใบไม้ผลิ:

  1. ความแตกต่างที่สำคัญคือ "ความสามารถในการทดสอบ"
  2. ฤดูใบไม้ผลิมาพร้อมกับ DI และ IOC ด้วยการทำงานอย่างหนักทั้งหมดโดยระบบเราไม่จำเป็นต้องทำงานใด ๆ (เช่นปกติเราจะกำหนดวัตถุของคลาสด้วยตนเอง แต่ผ่าน Di เราจะอธิบายด้วย @Service หรือ @Component - จับคู่คลาสเหล่านั้นจัดการ)
  3. ผ่านคำอธิบายประกอบ @Autowired เราสามารถเยาะเย้ย () ได้อย่างง่ายดายในเวลาทดสอบหน่วย
  4. การทำสำเนาและรหัสท่อ ใน JDBC เราเขียนโค้ดเดียวกันหลาย ๆ ครั้งเพื่อดำเนินการฐานข้อมูลทุกชนิด Spring แก้ปัญหานั้นผ่าน Hibernate และ ORM
  5. บูรณาการที่ดีกับกรอบงานอื่น ๆ เช่นเดียวกับ Hibernate, ORM, Junit & Mockito

Spring MVC

  1. Spring MVC framework เป็นโมดูลของฤดูใบไม้ผลิที่ให้การพัฒนาโปรแกรมประยุกต์บนเว็บ HTTP แบบอำนวยความสะดวก
  2. Spring MVC มีการแยกรหัสที่ชัดเจนเกี่ยวกับตรรกะการป้อนข้อมูล (ตัวควบคุม), ตรรกะทางธุรกิจ (รุ่น) และตรรกะ UI (ดู)
  3. รูปแบบ Spring MVC ช่วยในการพัฒนาเว็บแอปพลิเคชันที่ยืดหยุ่นและเชื่อมโยงอย่างอิสระ
  4. มอบวิธีการเข้ารหัสแบบต่างๆเพื่อปรับแต่งแอปพลิเคชันของคุณตามความต้องการของคุณ

Boot ฤดูใบไม้ผลิ:

  1. สร้างแอปพลิเคชันด่วนเพื่อให้แทนที่จะจัดการแอปพลิเคชันเว็บขนาดใหญ่เดียวเราแบ่งพวกเขาออกเป็นรายย่อยเป็น Microservices ที่แตกต่างกันซึ่งมีขอบเขตและความสามารถของตัวเอง
  2. การกำหนดค่าอัตโนมัติโดยใช้ Web Jar: ในฤดูใบไม้ผลิปกติมีการกำหนดค่าจำนวนมากเช่น DispatcherServlet, การสแกนส่วนประกอบ, ดู Resolver, Web Jar, XML (ตัวอย่างเช่นถ้าฉันต้องการกำหนดค่าแหล่งข้อมูล, ผู้จัดการโรงงานธุรกรรมผู้จัดการองค์กร) กำหนดค่าโดยอัตโนมัติเมื่อไม่พร้อมใช้งานโดยใช้คลาสพา ธ
  3. มาพร้อมกับ Spring Springters เริ่มต้นซึ่งมาพร้อมกับการพึ่งพาการกำหนดค่าเริ่มต้นของ Spring (เช่น Spring Core, Web-MVC, Jackson, Tomcat, การตรวจสอบ, การเชื่อมข้อมูล, การบันทึก) ไม่ต้องกังวลกับปัญหาการกำหนดเวอร์ชันด้วย

(Evolution like: Spring -> Spring MVC -> Spring Boot ดังนั้นเวอร์ชั่นใหม่จึงมีความเข้ากันได้กับฟีเจอร์เวอร์ชั่นเก่า) หมายเหตุ: มันไม่มีจุดทั้งหมด


10

SpringBoot ได้รับการกำหนดค่าล่วงหน้าซึ่งลดการกำหนดค่าหม้อไอน้ำและให้วิธีที่ง่ายที่สุดหรือรวดเร็วในการเริ่มต้นแอปพลิเคชันของคุณ

SpringBoot คำนึงถึงการกำหนดค่าจากผู้พัฒนามาเป็นของตัวเองมากกว่า Spring

โดยปริยาย SpringBoot ขึ้นอยู่กับแนวคิดของ Spring Framework เช่น bean, controller, services, jpa เป็นต้น

คุณสามารถพูดได้ว่า SpringBoot เป็นเสื้อคลุมของ Spring

ใน SpringBoot โดยพอร์ตเริ่มต้นของเซิร์ฟเวอร์คือ 8080 แต่ถ้าคุณต้องการเปลี่ยนให้ไปที่ application.properties ของคุณและเขียน

server.port = 8084


10
  • การใช้สปริงบูตคุณไม่จำเป็นต้องสร้างการกำหนดค่า สิ่งนี้จะทำโดยอัตโนมัติเมื่อคุณสร้างโครงการ

  • หากคุณใช้สปริง MVC คุณต้องสร้างการกำหนดค่าด้วยตนเอง มันซับซ้อนกว่า แต่ก็สำคัญ


คำอธิบายที่เรียบง่ายและสง่างาม
Sritam Jagadev

8

โดยไม่ต้องทำสิ่งเดียวกันซ้ำในคำตอบก่อนหน้านี้
ฉันกำลังเขียนคำตอบนี้สำหรับผู้ที่ต้องการเริ่มโครงการใหม่และไม่ทราบว่าเป็นกรอบงานที่ดีที่สุดในการเริ่มต้นโครงการของคุณ หากคุณเป็นผู้เริ่มต้นในกรอบนี้สิ่งที่ดีที่สุดที่ฉันชอบคือใช้การบู๊ตสปริง (พร้อมชุดเครื่องมือ STS / Spring ) เพราะมันช่วยได้มาก มันทำการกำหนดค่าทั้งหมดด้วยตัวเอง นอกจากนี้ให้ใช้Hibernateกับ spring-boot เป็นเฟรมเวิร์กฐานข้อมูล ด้วยชุดค่าผสมนี้แอปพลิเคชันของคุณจะดีที่สุด ฉันสามารถรับประกันได้ว่าด้วยประสบการณ์ของฉัน

แม้ว่านี่จะเป็นหนึ่งในกรอบงานที่ดีที่สุดสำหรับ JEE (ในปัจจุบัน) นี่คือสิ่งที่กำลังจะตายในอนาคตอันใกล้ มีทางเลือกที่เบาขึ้นมา ดังนั้นอัปเดตกับประสบการณ์ของคุณอย่ายึดติดกับกรอบงานใดกรอบหนึ่ง สิ่งที่ดีที่สุดคือความคล่องแคล่วในแนวคิดไม่ใช่ในกรอบ


5

คิดแบบนี้:

Spring MVCเป็นเฟรมเวิร์กผ่านเว็บเพื่อใช้สถาปัตยกรรม MVC

Spring Bootเป็นเครื่องมือที่เน้นโปรแกรมเมอร์ โปรแกรมเมอร์จะต้องมุ่งเน้นไปที่การเขียนโปรแกรมและเครื่องมือจะต้องมุ่งเน้นไปที่การกำหนดค่า ดังนั้นเราไม่จำเป็นต้องเสียเวลาไปกับการกำหนดค่า xml จำนวนมากเพื่อสร้าง 'Hello world' ที่เรียบง่าย



1

Spring MVC และ Spring Boot มีอยู่เพื่อจุดประสงค์ที่แตกต่างกัน ดังนั้นจึงไม่ควรเปรียบเทียบกันในฐานะผู้เข้าชิง

Spring Boot คืออะไร

Spring Boot เป็นเฟรมเวิร์กสำหรับการบรรจุแอปพลิเคชันสปริงด้วยค่าเริ่มต้นที่สมเหตุสมผล สิ่งนี้หมายความว่า?. คุณกำลังพัฒนาเว็บแอปพลิเคชันโดยใช้ Spring MVC, Spring Data, Hibernate และ Tomcat คุณทำแพ็คเกจและปรับใช้แอปพลิเคชันนี้กับเว็บเซิร์ฟเวอร์ของคุณอย่างไร ณ ตอนนี้เราต้องเขียนการกำหนดค่าไฟล์ XML ฯลฯ ด้วยตนเองเพื่อปรับใช้กับเว็บเซิร์ฟเวอร์

Spring Boot ทำเพื่อคุณด้วยการกำหนดค่า Zero XML ในโครงการของคุณ เชื่อฉัน, คุณไม่จำเป็นต้องใช้ตัวบอกเกี่ยวกับการปรับใช้, เว็บเซิร์ฟเวอร์, ฯลฯ . Spring Boot เป็นกรอบเวทย์มนตร์ที่รวมการพึ่งพาทั้งหมดให้คุณ ในที่สุดเว็บแอปพลิเคชันของคุณจะเป็นไฟล์ JAR แบบสแตนด์อโลนพร้อมเซิร์ฟเวอร์ฝัง

หากคุณยังคงสับสนกับการทำงานโปรดอ่านเกี่ยวกับการพัฒนาเฟรมเวิร์กของไมโครบริการโดยใช้สปริงบูต

Spring MVC คืออะไร

เป็นกรอบเว็บแอปพลิเคชันแบบดั้งเดิมที่ช่วยให้คุณสร้างเว็บแอปพลิเคชัน มันคล้ายกับกรอบ Struts

Spring MVC เป็นจาวาเฟรมเวิร์กที่ใช้ในการสร้างเว็บแอปพลิเคชัน มันเป็นไปตามรูปแบบการออกแบบ Model-View-Controller มันใช้คุณสมบัติพื้นฐานทั้งหมดของกรอบสปริงหลักเช่น Inversion of Control, Dependency Injection

Spring MVC นำเสนอโซลูชันที่ยอดเยี่ยมในการใช้ MVC ในกรอบงานสปริงโดยความช่วยเหลือของ DispatcherServlet ที่นี่ DispatcherServlet เป็นคลาสที่ได้รับการร้องขอที่เข้ามาและแมปไปยังแหล่งข้อมูลที่เหมาะสมเช่นตัวควบคุมรุ่นและมุมมอง

ฉันหวังว่าสิ่งนี้จะช่วยให้คุณเข้าใจความแตกต่าง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.