השוואה בין אביב ומגף אביב

1. סקירה כללית

במחקר זה אנו נבחן את ההבדלים בין מסגרות האביב הסטנדרטיות לבין Spring Boot.

אנו נתמקד ונדון במה שהמודולים של האביב, כמו MVC ואבטחה, נבדלים כאשר משתמשים בהם בליבת הליבה לעומת השימוש בהם עם Boot.

2. מהו אביב?

במילים פשוטות, מסגרת האביב מספקת תמיכה מקיפה בתשתית לפיתוח יישומי Java.

הוא ארוז בכמה תכונות נחמדות כמו הזרקת תלות ומודולים מחוץ לקופסה כמו:

  • אביב JDBC
  • אביב MVC
  • אביב ביטחון
  • אביב AOP
  • אביב ORM
  • מבחן אביב

מודולים אלה יכולים להפחית באופן דרסטי את זמן הפיתוח של יישום.

לדוגמא, בימים הראשונים של פיתוח אתרים בג'אווה, היינו צריכים לכתוב הרבה קוד boilerplate כדי להכניס רשומה למקור נתונים. אך באמצעות JDBCTemplate של מודול האביב JDBC נוכל לצמצם אותו לכמה שורות קוד עם תצורות בודדות בלבד.

3. מהו מגף אביב?

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

הוא לוקח מבט דעתני על פלטפורמת האביב שסללה את הדרך למערכת אקולוגית לפיתוח מהירה ויעילה יותר.

להלן רק כמה מהתכונות ב- Spring Boot:

  • תלות 'מתחילה' דעתנית לפשט את תצורת הבנייה והיישום
  • שרת משובץ כדי למנוע מורכבות בפריסת היישומים
  • מדדים, בדיקת תקינות ותצורה חיצונית
  • תצורה אוטומטית לפונקציונליות של אביב - במידת האפשר

בואו נכיר את שתי המסגרות האלה שלב אחר שלב.

4. תלות Maven

ראשית, בואו נסתכל על התלות המינימלית הנדרשת ליצירת יישום אינטרנט באמצעות Spring:

 org.springframework spring-web 5.2.9.RELEASE org.springframework spring-webmvc 5.2.9.RELEASE 

בניגוד לאביב, Spring Boot דורש תלות אחת בלבד בכדי להפעיל אפליקציית אינטרנט:

 org.springframework.boot spring-boot-starter-web 2.3.4.RELEASE 

כל שאר התלות מתווספות אוטומטית לארכיון הסופי בזמן הבנייה.

דוגמא טובה נוספת היא בדיקת ספריות. בדרך כלל אנו משתמשים במערך ספריות Test Spring, JUnit, Hamcrest ו- Mockito. בפרויקט אביב, עלינו להוסיף את כל הספריות הללו כתלות.

אך באביב אתחול, אנו זקוקים רק לתלות המתנע לבדיקה כדי לכלול באופן אוטומטי את הספריות הללו.

Spring Boot מספק מספר תלות Starter עבור מודולי Spring שונים. חלק מהנפוצים ביותר הם:

  • spring-boot-starter-data-jpa
  • אביב-אתחול-התחלה-אבטחה
  • מבחן אביב-אתחול-התחלה
  • קפיץ-אתחול-רשת
  • אביב-אתחול-התחלה-טימילית

לרשימת המתחילים המלאה, עיין גם בתיעוד האביב.

5. תצורת MVC

בואו נבדוק את התצורה הנדרשת ליצירת יישום אינטרנט JSP באמצעות אביב וגם אביב אתחול.

קפיץ דורש הגדרה של סרוולט השולח, מיפויים ותצורות תומכות אחרות. אנו יכולים לעשות זאת באמצעות web.xml קובץ או אתחול מעמד:

מחלקה ציבורית MyWebAppInitializer מיישמת את WebApplicationInitializer {@Override public void onStartup (ServletContext container) {AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext (); context.setConfigLocation ("com.baeldung"); container.addListener (ContextLoaderListener חדש (הקשר)); ServletRegistration.Dynamic dispatcher = container .addServlet ("dispatcher", DispatcherServlet חדש (הקשר)); dispatcher.setLoadOnStartup (1); dispatcher.addMapping ("/"); }}

אנחנו גם צריכים להוסיף את @EnableWebMvc ביאור לא @תְצוּרָה מחלק והגדר פותר תצוגה לפתרון התצוגות שהוחזרו מהבקרים:

@EnableWebMvc @ תצורה בכיתה הציבורית ClientWebConfig מיישם את WebMvcConfigurer {@Bean public ViewResolver viewResolver () {InternalResourceViewResolver bean = new InternalResourceViewResolver (); bean.setViewClass (JstlView.class); bean.setPrefix ("/ WEB-INF / view /"); bean.setSuffix (". jsp"); שעועית להחזיר; }}

בהשוואה לכל זה, Spring Boot צריך רק כמה מאפיינים כדי לגרום לדברים לעבוד, לאחר שהוספנו את המתנע האינטרנט:

spring.mvc.view.prefix = / WEB-INF / jsp / spring.mvc.view.suffix = .jsp

כל תצורת האביב לעיל כלולה באופן אוטומטי על ידי הוספת המתנע של אתחול האינטרנט, באמצעות תהליך הנקרא תצורה אוטומטית.

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

כמובן שאם אנחנו רוצים להוסיף תצורה מותאמת אישית משלנו, התצורה האוטומטית של Spring Boot תיסוג.

5.1. קביעת תצורה של מנוע תבנית

בואו נלמד כעת כיצד להגדיר א טימילף מנוע תבנית גם באביב וגם באביב.

באביב עלינו להוסיף את 5. אביב קפיץ תלות וכמה תצורות עבור פותר התצוגה:

@Configuration @EnableWebMvc מחלקה ציבורית MvcWebConfig מיישם את WebMvcConfigurer {@Autowired פרטי ApplicationContext applicationContext; @Bean ציבורי SpringResourceTemplateResolver templateResolver () {SpringResourceTemplateResolver templateResolver = חדש SpringResourceTemplateResolver (); templateResolver.setApplicationContext (applicationContext); templateResolver.setPrefix ("/ WEB-INF / views /"); templateResolver.setSuffix (". html"); תבנית החזרה Resolver; } @Bean הציבור SpringTemplateEngine templateEngine () {SpringTemplateEngine templateEngine = SpringTemplateEngine חדש (); templateEngine.setTemplateResolver (templateResolver ()); templateEngine.setEnableSpringELCompiler (נכון); תבנית החזרה מנוע; } @Override חלל ציבורי configureViewResolvers (רישום ViewResolverRegistry) {ThymeleafViewResolver resolver = ThymeleafViewResolver חדש (); resolver.setTemplateEngine (templateEngine ()); registry.viewResolver (resolver); }}

אתחול האביב 1 דרש רק את התלות של אביב-אתחול-התחלה-טימילית כדי לאפשר טימילף תמיכה ביישום אינטרנט. אבל בגלל התכונות החדשות ב Thymeleaf3.0, עלינו להוסיף ניב פריסת התים גם כתלות ביישום אינטרנט של Spring Boot 2. לחלופין, אנו יכולים לבחור להוסיף a אביב-אתחול-התחלה-טימילית תלות שתדאג לנו לכל זה.

לאחר התלות במקום, אנו יכולים להוסיף את התבניות ל- src / main / resources / templates התיקיה ואתחול האביב יציג אותם באופן אוטומטי.

6. תצורת אבטחה באביב

לשם הפשטות, נראה כיצד מופעלת אימות HTTP בסיסי המוגדר כברירת מחדל באמצעות מסגרות אלה.

נתחיל בבדיקת התלות והתצורה הדרושה לנו כדי לאפשר אבטחה באמצעות אביב.

האביב דורש גם את הסטנדרט אביב-ביטחון-רשת ו אביב-ביטחון-תצורה תלות להגדרת אבטחה ביישום.

הַבָּא, עלינו להוסיף כיתה שמרחיבה את מתאם WebSecurityConfigurer ועושה שימוש ב- @EnableWebSecurity ביאור:

@Configuration @EnableWebSecurity המחלקה הציבורית CustomWebSecurityConfigurerAdapter מרחיב את WebSecurityConfigurerAdapter {@Autowired public void configureGlobal (AuthenticationManagerBuilder auth) זורק חריג {auth.inMemoryAuthentication () .withUser ("משתמש 1)). ("ROLE_USER"); } תצורת הריק המוגנת על ידי @Override (HttpSecurity http) זורקת חריג {http.authorizeRequests () .anyRequest (). מאומת () .and () .httpBasic (); } @Bean סיסמא ציבורית Encoder סיסמא Encoder () {להחזיר BCryptPasswordEncoder חדש (); }}

כאן אנו משתמשים inMemoryAuthentication להגדרת האימות.

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

תצורת האבטחה ב- Spring Boot זהה לזו שלמעלה.

אם אתה צריך לדעת כיצד ניתן להשיג את תצורת ה- JPA הן באביב והן באביב אתחול, עיין במאמר שלנו מדריך ל- JPA עם אביב.

7. מגף יישום

ההבדל הבסיסי באתחול האפליקציה באביב ובאביב אתחול טמון בסרוולט. האביב משתמש או web.xml אוֹ SpringServletContainerInitializer כנקודת הכניסה לאתחול.

מצד שני, Spring Boot משתמש בתכונות Servlet 3 בלבד בכדי לאתחל יישום. בואו נדבר על זה בפירוט.

7.1. איך רצועות נעלי אביב?

האביב תומך בשני המורשת web.xml דרך של bootstrapping כמו גם את שיטת Servlet 3+ האחרונה.

בוא נראה את web.xml גישה בשלבים:

  1. מיכל Servlet (השרת) קורא web.xml
  2. ה DispatcherServlet מוגדר ב web.xml מיוצר על ידי המכולה
  3. DispatcherServlet יוצר WebApplicationContext על ידי קריאה WEB-INF / {servletName} -servlet.xml
  4. סוף - סוף, ה DispatcherServlet רושמת את השעועית שהוגדרה בהקשר היישום

להלן אופן הגישה של מגפי האביב באמצעות Servlet 3+:

  1. המכולה מחפש שיעורים המיישמים ServletContainerInitializer ומבצע
  2. ה SpringServletContainerInitializer מוצא את כל הכיתות מיישמות WebApplicationInitializer
  3. ה WebApplicationInitializer יוצר את ההקשר עם XML או @תְצוּרָה שיעורים
  4. ה WebApplicationInitializer יוצר את DispatcherServlet עם ההקשר שנוצר בעבר.

7.2. איך רצועות אתחול האביב?

נקודת הכניסה של יישום Spring Boot היא המחלקה שמסומנת עליה @ SpringBootApplication:

@SpringBootApplication מחלקה ציבורית יישום {public static void main (String [] args) {SpringApplication.run (Application.class, args); }}

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

כמו כן, הוא דואג לכריכת ה- סרוולט, פילטר, ו ServletContextInitializer שעועית מהקשר היישום למיכל השרת המוטמע.

מאפיין נוסף של Spring Boot הוא שהוא סורק אוטומטית את כל המחלקות באותה חבילה או חבילות משנה של המחלקה הראשית אחר רכיבים.

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

@SpringBootApplication מחלקה ציבורית יישום מרחיב את SpringBootServletInitializer {// ...}

כאן מיכל ה- servlet החיצוני מחפש את המחלקה הראשית המוגדרת בקובץ META-INF בארכיון האינטרנט וב- SpringBootServletInitializer ידאג לכבול את סרוולט, פילטר, ו ServletContextInitializer.

8. אריזה ופריסה

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

למשל, תוסף Spring Boot Maven מספק תמיכה באביב Boot ב- Maven. זה גם מאפשר לארוז צנצנת הפעלה או ארכיוני מלחמה ולהריץ יישום "במקום".

חלק מהיתרונות של Spring Boot לעומת Spring בהקשר לפריסה כוללים:

  • מספק תמיכה במיכלים משובצים
  • הוראה להפעלת הצנצנות באופן עצמאי באמצעות הפקודה java -jar
  • אפשרות להוציא תלות כדי למנוע התנגשויות פוטנציאליות בעת פריסה במיכל חיצוני
  • אפשרות לציין פרופילים פעילים בעת פריסה
  • ייצור אקראי של יציאות למבחני אינטגרציה

9. מסקנה

במדריך זה למדנו על ההבדלים בין אביב ומגף אביב.

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


$config[zx-auto] not found$config[zx-overlay] not found