מבוא לביטויי Pointcut באביב

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

במדריך זה נדון בשפת הביטוי של AOP pointcut באביב.

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

2. שימוש

ביטוי קיצורי דרך יכול להופיע כערך של ה- @Pointcut ביאור:

@Pointcut ("בתוך (@ org.springframework.stereotype.Repository *)") repositoryClassMethods ציבורי ריק () {}

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

@Around ("repositoryClassMethods ()") אובייקט ציבורי של מטרMethodExecutionTime (ProceedingJoinPoint pjp) זורק זורק {...}

ביטוי קיצורי דרך יכול להופיע גם כערך ה- ביטוי רכוש של aop: pointcut תָג:

3. מעצבי Pointcut

ביטוי קיצורי דרך מתחיל ב- מעצב נקודה (PCD), שהיא מילת מפתח המספרת ל- Spring AOP למה להתאים. ישנם מספר מעצבי קיצור דרך, כגון ביצוע שיטה, סוג, טיעוני שיטה או הערות.

3.1 ביצוע

ה- PCD האביבי העיקרי הוא ביצוע, שתואם לנקודות הצטרפות לביצוע השיטה.

@Pointcut ("ביצוע (מחרוזת ציבורית com.baeldung.pointcutadvice.dao.FooDao.findById (ארוך))")

קיצור דרך זה לדוגמא יתאים בדיוק לביצוע findById שיטת ה- FooDao מעמד. זה עובד, אבל זה לא מאוד גמיש. נניח שנרצה להתאים את כל השיטות של ה- FooDao בכיתה, שעשויות להיות בעלות חתימות, סוגי החזרה וטיעונים שונים. כדי להשיג זאת אנו עשויים להשתמש בתווים כלליים:

@Pointcut ("ביצוע (* com.baeldung.pointcutadvice.dao.FooDao. * (..))")

כאן התו הכללי הראשון תואם לכל ערך החזרה, השני תואם לכל שם שיטה ו- (..) תבנית תואמת לכל מספר פרמטרים (אפס או יותר).

3.2 בְּתוֹך

דרך נוספת להשיג אותה תוצאה מהסעיף הקודם היא באמצעות בְּתוֹך PCD, המגביל התאמה לנקודות הצטרפות מסוגים מסוימים.

@Pointcut ("בתוך (com.baeldung.pointcutadvice.dao.FooDao)")

אנו יכולים גם להתאים כל סוג בתוך ה- com.baeldung חבילה או חבילת משנה.

@Pointcut ("בתוך (com.baeldung .. *)")

3.3 זֶה ו יַעַד

זֶה מגביל התאמה לנקודות צירוף בהן הפניה לשעועית היא מופע מהסוג הנתון, בעוד יַעַד מגביל התאמה לנקודות צירוף בהן אובייקט היעד הוא מופע מהסוג הנתון. הראשון פועל כאשר Spring AOP יוצר פרוקסי מבוסס CGLIB, והאחרון משמש כאשר נוצר פרוקסי מבוסס JDK. נניח שמחלקת היעד מיישמת ממשק:

FooDao ממעמד ציבורי מיישם את BarDao {...}

במקרה זה, Spring AOP ישתמש בפרוקסי מבוסס JDK ועליך להשתמש ב- יַעַד PCD מכיוון שהאובייקט הסמוך יהיה מופע של פרוקסי בכיתה וליישם את ברדאו מִמְשָׁק:

@Pointcut ("יעד (com.baeldung.pointcutadvice.dao.BarDao)")

מצד שני אם FooDao אינו מיישם שום ממשק או proxyTargetClass המאפיין מוגדר כ- true ואז האובייקט הסמוך יהיה תת-מחלקה של FooDao וה זֶה ניתן להשתמש ב- PCD:

@Pointcut ("זה (com.baeldung.pointcutadvice.dao.FooDao)")

3.4 טוען

PCD זה משמש להתאמת ארגומנטים של שיטה מסוימת:

@Pointcut ("ביצוע (* * .. מצא * (ארוך))")

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

@Pointcut ("ביצוע (* * .. מצא * (ארוך, ..))")

3.5 @יַעַד

ה @יַעַד PCD (לא להתבלבל עם יַעַד PCD שתואר לעיל) מגביל התאמה לנקודות הצטרפות בהן המחלקה של האובייקט המבצע כוללת הערה מהסוג הנתון:

@Pointcut ("@ target (org.springframework.stereotype.Repository)")

3.6 @ ארגס

PCD זה מגביל התאמה לנקודות צירוף שבהן סוג זמן הריצה של הארגומנטים שהועברו בפועל כולל הערות מהסוגים / ה הנתונים. נניח שאנחנו רוצים להתחקות אחר כל השיטות לקבלת שעועית עם הערות @יֵשׁוּת ביאור:

@Pointcut ("@ args (com.baeldung.pointcutadvice.annotations.Entity)") שיטות חלל ציבוריות AcceptingEntities () {}

כדי לגשת לוויכוח עלינו לספק הצטרף ל-Point טיעון לעצה:

@Before ("methodsAcceptingEntities ()") public void logMethodAcceptionEntityAnnotatedBean (JoinPoint jp) {logger.info ("קבלת שעועית עם הערת @Entity:" + jp.getArgs () [0]); }

3.7 @בְּתוֹך

PCD זה מגביל התאמה לנקודות הצטרפות בסוגים בעלי ההערה הנתונה:

@Pointcut ("@ בתוך (org.springframework.stereotype.Repository)")

שווה ערך ל:

@Pointcut ("בתוך (@ org.springframework.stereotype.Repository *)")

3.8 @ הערה

PCD זה מגביל התאמה לנקודות הצטרפות בהן הנושא של נקודת ההצטרפות מקבל את ההערה הנתונה. לדוגמא אנו עשויים ליצור @Loggable ביאור:

@Pointcut ("@ annotation (com.baeldung.pointcutadvice.annotations.Loggable)") חלל ציבורי loggableMethods () {}

לאחר מכן אנו עשויים לרשום ביצוע של השיטות המסומנות באותה הערה:

@ לפני ("loggableMethods ()") logMethod ציבורי ריק (JoinPoint jp) {String methodName = jp.getSignature (). GetName (); logger.info ("שיטת ביצוע:" + methodName); }

4. שילוב ביטויים של Pointcut

ניתן לשלב ביטויים באמצעות Pointcut באמצעות &&, || ו ! מפעילים:

@Pointcut ("@ target (org.springframework.stereotype.Repository)") repositoryMethods public void () {} @Pointcut ("ביצוע (* * .. create * (Long, ..))") public public ריק LongLarParamMethods () {} @Pointcut ("repositoryMethods () && firstLongParamMethods ()") ישות חלל ציבוריתCreationMethods () {}

5. מסקנה

במבוא המהיר הזה ל- Spring AOP ול- pointcuts, המחשנו כמה דוגמאות לשימוש בביטויים נקודתיים.

ניתן למצוא את מערך הדוגמאות המלא ב- GitHub.


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