מסגרת האביב מאסטרינג 5, חלק 1: אביב MVC

Spring MVC היא הספרייה המסורתית של מסגרת האביב לבניית יישומי Java. זוהי אחת ממסגרות הרשת הפופולריות ביותר לבניית יישומי Java פונקציונליים לחלוטין ושירותי אינטרנט RESTful. במדריך זה תקבל סקירה כללית של Spring MVC ותלמד כיצד לבנות יישומי אינטרנט של Java באמצעות Spring Boot, Spring Initializr ו- Thymeleaf.

הורד הורד את הקוד קבל את קוד המקור למשל יישומים במדריך זה. נוצר עבור JavaWorld על ידי סטיבן היינס

מגף אביב עם Initializr אביב

אנו נחקור במהירות את יישום האינטרנט שלנו ב- Spring MVC בעזרת Spring Boot ו- Spring Initializr. נתון קלט לסוג היישום שייבנה, Spring Initializr משתמש בתלות ובברירות המחדל הנפוצות ביותר כדי להגדיר ולהגדיר יישום בסיסי של Boot Boot. ניתן גם להוסיף תלות מותאמת אישית ו- Spring Initializr יכלול וינהל אותם, מה שמבטיח תאימות גרסאות הן לתוכנות צד שלישי והן ל- Spring. יישומי Spring Boot פועלים עצמאיים, מבלי לדרוש ממך לספק סביבת זמן ריצה.

במקרה זה, מכיוון שאנו בונים יישום אינטרנט, Spring Boot יכלול ותגדיר באופן אוטומטי את Tomcat כחלק מזמן הריצה של האפליקציה. אנו יכולים גם להתאים אישית את האפליקציה על ידי הוספת מנהל התקן H2 לקובץ MOM POM שלנו. Spring Boot ייצור אוטומטית מסד נתונים משובץ DataSourceומופע בהקשר היישום. לאחר הגדרת התלות, Spring Boot יספק תצורות ברירת מחדל ליישום. כמובן שנוכל לשנות את התצורות אם נרצה בכך, אך הודות ל- Spring Boot יש לנו נקודת התחלה: יישום עובד מוגדר לחלוטין מהקופסה.

לאחר שבחרנו והגדרנו את התלות שלנו, נעביר את הבחירות האלה ל- Spring Initializr, שיספק קובץ ZIP להורדה המכיל פרויקט Spring Boot Boot בסיסי.

אביב MVC עם מנוע מסד נתונים H2

נתחיל ביצירת יישום אינטרנט בסיסי של Spring MVC שממשיך נתונים למסד נתונים משובץ H2.

שלב 1. הגדר את האפליקציה והגדר אותה

נווט אל Spring Initializr בכתובת start.spring.io ובחר צור פרויקט Maven עם Java ו- Spring Boot 2.0.X , כאשר X היא גרסת Spring Boot האחרונה (2.0.3 בזמן כתיבת שורות אלה). הקפד לבחור Spring Boot 2.x כדי שתוכל ליישם את Spring Web MVC 5. Spring Boot 1.4 ו- Spring Boot 1.5 ישמשו את Spring 4.

הזן שם קבוצה עם הפורמט התואם את כתובת האינטרנט שלך, כגון com.geekcap.javaworld, והזן שם חפץ, כגון spring5mvc-example. איור 1 מראה את התצורה שלי.

סטיבן היינס

כדי להוסיף תלות לאפליקציית האינטרנט, תוכל להזין רשימת תלות מופרדת בפסיקים בשדה הטקסט חיפוש תלות או ללחוץ על מעבר לגרסה המלאה . נלך בדרך הקלה יותר על ידי לחיצה על מעבר לגרסה המלאה . התלות מחולקת לקבוצות, כגון מנועי Core, Web ו- Template. לדוגמא זו בחר בתיבות הסימון עבור: אינטרנט -> אינטרנט, מנועי תבנית -> Thymeleaf, SQL -> JPA ו- SQL -> H2 . הנה מה שכל אחת מהבחירות הללו תוסיף ליישום:

  • רשת: אביב MVC וטומקט
  • Thymeleaf: מנוע תבניות האינטרנט של Thymeleaf
  • JPA: נתוני אביב JPA, מצב שינה ומעיין אביב
  • H2: מסד הנתונים המשובץ H2

כשתסיים, לחץ על הלחצן צור פרויקט בתחתית הדף. Spring Initializr ייצור קובץ ZIP מוכן עם כל מקורות הפרויקט הנדרשים, אותו תוכלו להוריד.

שלב 2. ייבא את פרויקט Spring Initializr ל- IDE שלך

חלץ את קובץ ה- ZIP מ- Spring Initializr, ואז ייבא את הפרויקט ל- IDE המועדף עליך. לדוגמה, כדי לייבא את הפרויקט ל- IntelliJ, בחר קובץ -> פרויקט חדש , כפי שמוצג באיור 2.

סטיבן היינס

שלב 3. הגדר את MOM POM שלך

לאחר מכן, נווט לייבא פרויקט ממודול חיצוני , בחר Maven ולחץ על הבא . הקפד לבחור SDK של פרוייקט Java 1.8 ואז לחץ על סיום .

אפליקציית המתנע של Spring Boot

עכשיו בואו נסתכל על יישום המתחיל של Spring Boot שנוצר על ידי המאמצים (המינימליים שלנו) עד כה.

כדי להתחיל, רישום 1 מציג את קובץ Maven POM.

רישום 1. Maven pom.xml

   4.0.0 com.geekcap.javaworld spring5mvc-example 0.0.1-SNAPSHOT jar spring5mvc-example Demo project for Spring Boot  org.springframework.boot spring-boot-starter-parent 2.0.3.RELEASE     UTF-8 UTF-8 1.8    org.springframework.boot spring-boot-starter-data-jpa   org.springframework.boot spring-boot-starter-thymeleaf   org.springframework.boot spring-boot-starter-web   com.h2database h2 runtime   org.springframework.boot spring-boot-starter-test test      org.springframework.boot spring-boot-maven-plugin     

שים לב כי קובץ POM POM משתמש הורה מיוחדת: spring-boot-starter-parent. נשתמש ב- POM האב כדי לנהל את הגרסאות של כל התלות שלנו ולוודא שהגרסאות תואמות. המאגרים בסוף התייחסות קובץ POM האביב מצלם ו אבן דרך המאגרים. אנו זקוקים לאלה מכיוון ש Spring Boot 2.x הוא עדיין מהדורת אבן דרך בזמן כתיבת שורות אלה.

התלות מינימלית למדי, ולרובם מקדימים spring-boot-starter:

  • spring-boot-starter-data-jpa
  • spring-boot-starter-thymeleaf
  • spring-boot-starter-web
  • spring-boot-starter-test

כל אחת מהתלות המתחילה מביאה את כל תלות המשנה הדרושה לה. איור 3 מציג את תצוגת התלות המורחבת חלקית ב- IntelliJ.

סטיבן היינס

קובץ ה- POM כולל את התלות הבאה:

  • spring-boot-starter-data-jpa כולל נתונים על מצב שינה ומעיין.
  • spring-boot-starter-thymeleaf כולל את מנוע התבנית של Thymeleaf.
  • spring-boot-starter-webכולל spring-boot-starter-tomcatגרסה משובצת של אפאצ'י טומקט.
  • spring-boot-starter-json כולל את ספריות ג'קסון JSON.
  • spring-web and spring-webmvc כולל אביב MVC.
  • spring-boot-starter-test כולל ספריות בדיקה כגון JUnit ו- Mockito.

כאשר Spring Boot רואה את התלות הללו ב- CLASSPATH, הוא יוזם תצורה אוטומטית. לדוגמא, כאשר הוא מוצא spring-boot-starter-web, הוא יוצר גרסה מוטמעת של Tomcat, וכאשר הוא מוצא H2 והוא spring-boot-starter-jpaיוצר מסד נתונים משובץ H2 ו- Hibernate EntityManager. לאחר מכן הוא מחבר את EntityManagerנתוני האביב.

Spring Boot יוצר גם מחלקה אחת בה ניתן להשתמש להפעלת היישום. המחלקה ליישום הדוגמה מוצגת ברשימה 2.

רישום 2. Spring5mvcExampleApplication.java

 package com.geekcap.javaworld.spring5mvcexample; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Spring5mvcExampleApplication { public static void main(String[] args) { SpringApplication.run(Spring5mvcExampleApplication.class, args); } } 

This class leverages the SpringApplication.run() method, passing in the class to run (Spring5mvcExampleApplication in this example). The @SpringBootApplication annotation includes the following annotations:

  • @Configuration informs Spring that the Spring5mvcExampleApplication class contains configuration information. (This annotation can be used to create beans that will get registered with the Spring context.)
  • @EnableAutoConfiguration tells Spring to automatically configure resources from dependencies found in the CLASSPATH, such as H2 and Tomcat.
  • @ComponentScan tells Spring to scan packages in the CLASSPATH under the current package (com.geekcap.javaworld.spring5mvcexample) for Spring-annotated components such as @Service and @Controller.

Spring scans the CLASSPATH and automatically creates components such as the embedded Tomcat server and H2 database. It then populates the Spring context with the application components found in the package scan. In essence, Spring Boot makes it very easy to select and configure the services, components, controllers, entities, and so forth that you need for your application. Once you've done that, Spring will automatically find them, make them available in the Spring context, and autowire everything together.

We've got our Spring Boot starter project setup and ready to go. In the next section we'll create the Spring MVC components for our Java web application.

What is the Spring context?

The Spring context is a registry of all available Spring beans. Classes are identified as Spring beans by annotating them with specific Spring annotations. Examples include @Service, which identifies a business service, @Controller, which identifies a Spring MVC controller (i.e., handles web requests), and @Entity, which is a JPA annotation used to identify classes that are mapped to database tables.

Once these beans are annotated they need to be registered with the Spring context, which Spring Boot does by performing a package scan of all classes in packages in your project. As the Spring context is being built, it implements the inversion-of-control (IoC) design pattern through dependency injection: when a Spring bean needs a dependency, such as a service or repository, the bean can either define a constructor that accepts the dependent bean or it can leverage the @Autowired annotation to tell Spring that it needs that dependency. Spring resolves all dependencies and "autowires" the application together.

Dependency Injection is a powerful design pattern because, rather than creating and managing dependencies inside your code--which can be messy and leads to tightly coupled classes--you can instead delegate control to the Spring container. Your class simply tells the container what dependencies it needs to run and the container provides the appropriate dependencies to your class at runtime.

About Spring MVC 5

Spring MVC implements the popular Model-View-Controller pattern, which you've probably seen in other web frameworks. The Model-View-Controller pattern separates concerns into three categories:

  • Model represents your domain objects.
  • View renders your model to a view, such as to an HTML page.
  • Controller sits between your view and model and translates change requests in the view into changes in the model, and vice versa. In practical terms, the controller accepts incoming requests, potentially updates the model, and sends your model objects to a "view" to render back to the client.

In Spring MVC, controllers are identified by the @Controller annotation and accompanied by a @RequestMapping annotation. The annotation defines the HTTP verb (standard HTTP commands like GET, POST, PUT, and DELETE) and URI for which the request-mapping method will be applied. Spring 4 introduced shortcut request mappings, which make things even easier. We'll use these mappings--@GetMapping, @PostMapping, @PutMapping, @PatchMapping, and @DeleteMapping--for our example application.

The model in Spring MVC

ליישום שלנו, נגדיר אובייקט מודל פשוט, a Widget, נשמור אותו במסד נתונים H2 מוטבע, ונבנה בקר לניהול ווידג'טים. נתחיל Widgetמהשיעור, שמוצג ברשימה 3.