הערות שעועית אביבית

מאמר זה הוא חלק מסדרה: • הערות ליבת אביב

• הערות רשת אביבית

• הערות על מגפי האביב

• הערות על תזמון האביב

• הערות על נתוני אביב

• הערות שעועית באביב (המאמר הנוכחי)

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

במאמר זה נדון ביותר ביאורים נפוצים של שעועית אביבית משמש להגדרת סוגים שונים של שעועית.

ישנן מספר דרכים להגדיר שעועית במיכל אביב. אנו יכולים להכריז עליהם באמצעות תצורת XML. אנחנו יכולים להכריז על שעועית באמצעות @אפונה ביאור בכיתת תצורה.

לחלופין נוכל לסמן את הכיתה באחת ההערות מה- org.springframework.stereotype חבילה והשאיר את השאר לסריקת רכיבים.

2. סריקת רכיבים

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

@ComponentScan מגדיר אשר חבילות לסרוק אחר שיעורים עם תצורת ביאור. אנו יכולים לציין את שמות חבילות הבסיס ישירות באמצעות אחד מה- basePackages אוֹ ערך טיעונים (ערך הוא כינוי עבור basePackages):

@Configuration @ComponentScan (basePackages = "com.baeldung.annotations") מחלקה VehicleFactoryConfig {}

כמו כן, אנו יכולים להצביע על שיעורים בחבילות הבסיס עם ה- basePackageClasses טַעֲנָה:

@Configuration @ComponentScan (basePackageClasses = VehicleFactoryConfig.class) מחלקה VehicleFactoryConfig {}

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

אם לא צויין שום טיעון, הסריקה מתרחשת מאותה חבילה שבה @ComponentScan כיתת ביאורים קיימת.

@ComponentScan ממנף את תכונת ההערות החוזרות על Java 8, מה שאומר שאנחנו יכולים לסמן כיתה איתה מספר פעמים:

@Configuration @ComponentScan (basePackages = "com.baeldung.annotations") @ComponentScan (basePackageClasses = VehicleFactoryConfig.class) מחלקה VehicleFactoryConfig {}

לחלופין, אנו יכולים להשתמש @ComponentScans כדי לציין מספר רב @ComponentScan תצורות:

@Configuration @ComponentScans ({@ComponentScan (basePackages = "com.baeldung.annotations"), @ComponentScan (basePackageClasses = VehicleFactoryConfig.class)}) מחלקה VehicleFactoryConfig {}

מתי באמצעות תצורת XML, סריקת רכיבי התצורה היא קלה באותה מידה:

3. @רְכִיב

@רְכִיב היא הערה ברמת הכיתה. במהלך סריקת הרכיבים, מסגרת האביב מזהה אוטומטית שיעורים עם הערות @רְכִיב.

לדוגמה:

כיתת @Component CarUtility {// ...}

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

מאז מאגר @, @שֵׁרוּת, @תְצוּרָה, ו @בקר כולם מטא-ביאורים של @רְכִיב, הם חולקים את אותה התנהגות של שמות שעועית. כמו כן, אביב אוסף אותם באופן אוטומטי במהלך תהליך סריקת הרכיבים.

4. מאגר @

מחלקות DAO או Repository מייצגות בדרך כלל את שכבת הגישה למסד הנתונים ביישום, ויש להעלות עליהן הערה מאגר @

מחלקת @ מאגר VehicleRepository {// ...}

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

כדי לאפשר תרגום חריג, אנחנו צריכים להכריז על עצמנו PersistenceExceptionTranslationPostProcessor אפונה:

@Bean PersistenceExceptionTranslationPostProcessor exceptionTranslation () {להחזיר PersistenceExceptionTranslationPostProcessor חדש (); }

שים לב, שברוב המקרים, אביב מבצע את הצעד לעיל באופן אוטומטי.

לחלופין, באמצעות תצורת XML:

5. @שֵׁרוּת

ה לוגיקה עסקית של יישום נמצא בדרך כלל בשכבת השירות - לכן נשתמש ב- @שֵׁרוּת ביאור כדי לציין כי מחלקה שייכת לשכבה זו:

@Service בכיתה ציבורית VehicleService {// ...}

6. @בקר

@בקר היא הערה ברמת הכיתה שאומרת למסגרת האביב כי מחלקה זו משמשת כ- בקר באביב MVC:

@Controller מחלקה ציבורית VehicleController {// ...}

7. @תְצוּרָה

תְצוּרָה שיעורים יכולים מכילים שיטות הגדרת שעועית ביאור עם @אפונה:

מחלקה @Configuration VehicleFactoryConfig {@Bean מנוע מנוע () {להחזיר מנוע חדש (); }}

8. הערות סטריאוטיפ ו- AOP

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

לדוגמה, נניח שאנחנו רוצים למדוד את זמן הביצוע של שיטות משכבת ​​DAO. ניצור את ההיבט הבא (תוך שימוש בהערות AspectJ) תוך ניצול מאגר @ סטֵרֵאוֹטִיפּ:

@Aspect @Component מחלקה ציבורית PerformanceAspect {@Pointcut ("בתוך (@ org.springframework.stereotype.Repository *)") repositoryClassMethods () {}; @Around ("repositoryClassMethods ()") אובייקט ציבורי measureMethodExecutionTime (ProceedingJoinPoint joinPoint) זורק זרק {התחלה ארוכה = System.nanoTime (); אובייקט returnValue = joinPoint.proceed (); סוף ארוך = System.nanoTime (); MethodName מחרוזת = joinPoint.getSignature (). GetName (); System.out.println ("ביצוע" + methodName + "לקח + TimeUnit.NANOSECONDS.toMillis (סוף התחלה) +" ms "); return returnValue; }}

בדוגמה זו, יצרנו קיצור דרך שתואם את כל השיטות בשיעורים המוערים מאגר @. השתמשנו ב- @סְבִיב עצה ואז למקד את קיצור הדרך ולקבוע את זמן הביצוע של שיחות השיטות המ יורטות.

באמצעות גישה זו, אנו עשויים להוסיף התנהגויות רישום, ניהול ביצועים, ביקורת או אחר לכל שכבת יישום.

9. מסקנה

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

למדנו גם כיצד להשתמש בסריקת רכיבים כדי להודיע ​​למכולה היכן למצוא מחלקות המוערות.

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

כרגיל, הדוגמאות זמינות ב- GitHub.

« הערות נתוני אביב קודמות