הערת האביב @Qualifier

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

במאמר זה נחקור מה ה @מַגְדִיר ביאור יכול לעזור לנו עם, אילו בעיות היא פותרת, וכיצד להשתמש בה.

נסביר גם במה זה שונה מה- @יְסוֹדִי ביאור ומתוך חיווט אוטומטי בשם.

2. צורך בחוט אוטומטי להתבהמות

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

כברירת מחדל, Spring פותר ערכים חוטית אוטומטיים לפי סוג.

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

בואו נדמיין מצב בו קיימים שני מועמדים אפשריים לאביב להזריק כשותפי שעועית במקרה נתון:

@Component ("fooFormatter") מחלקה ציבורית FooFormatter מיישמת את Formatter {פורמט מחרוזת ציבורי () {להחזיר "foo"; }} @Component ("barFormatter") מחלקה ציבורית BarFormatter מיישם פורמט {פורמט מחרוזות ציבורי () {סרגל "חזרה"; }} @ FooService בכיתה ציבורית רכיב {@ מעצב מעצב פרטי פרטי; }

אם ננסה לטעון FooService במסגרתנו, מסגרת האביב תזרוק א NoUniqueBeanDefinitionException. זה בגלל ש האביב לא יודע איזה שעועית להזריק. כדי למנוע בעיה זו, ישנם מספר פתרונות. ה @מַגְדִיר ביאור הוא אחד מהם.

3. @מַגְדִיר ביאור

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

בואו ונבקר בדוגמה הקודמת שלנו ונראה כיצד נפתור את הבעיה על ידי הכללת ה- @מַגְדִיר ביאור לציין באיזה שעועית אנו רוצים להשתמש:

מעצב פרטי FooService {@Autowired @Qualifier ("fooFormatter") פרטי; }

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

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

שים לב שיכולנו להשתמש גם ב- @מַגְדִיר ביאור על מעצב יישום שיעורים, במקום לציין את השמות שלהם @רְכִיב ביאורים, כדי להשיג את אותו האפקט:

@Component @Qualifier ("fooFormatter") בכיתה ציבורית FooFormatter מיישמת את Formatter {// ...} @Component @Qualifier ("barFormatter") ברמה הציבורית BarFormatter מיישמת את Formatter {// ...} 

4. @מַגְדִיר לעומת @יְסוֹדִי

יש ביאור נוסף שנקרא @יְסוֹדִי שנוכל להחליט איזה שעועית להזריק כאשר קיימת עמימות בנוגע להזרקת תלות.

ביאור זה מגדיר העדפה כאשר קיימים שעועית מרובה מאותו סוג. השעועית המזוהה עם @יְסוֹדִי בהערה ישמש אלא אם כן צוין אחרת.

בואו נראה דוגמה:

@ תצורה בכיתה ציבורית Config {@ שעובד ציבורי עובד johnEmployee () {להחזיר עובד חדש ("ג'ון"); } @Bean @ עובד ציבורי ראשוני tonyEmployee () {להחזיר עובד חדש ("טוני"); }}

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

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

ראוי לציין זאת אם שניהם @מַגְדִיר ו @יְסוֹדִי ביאורים קיימים, ואז @מַגְדִיר להערה תהיה עדיפות. בעיקרון, @יְסוֹדִי מגדיר ברירת מחדל, בעוד @מַגְדִיר הוא מאוד ספציפי.

בואו נראה דרך אחרת להשתמש ב- @יְסוֹדִי ביאור, הפעם באמצעות הדוגמה הראשונית:

@Component @ מחלקה ציבורית ראשית FooFormatter מיישם את Formatter {// ...} @Component class class BarFormatter מיישם את Formatter {// ...} 

במקרה זה, @יְסוֹדִי ההערה ממוקמת באחד משיעורי היישום ותערער את התרחיש.

5. @מַגְדִיר לעומת חיווט אוטומטי לפי שם

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

FooService בכיתה ציבורית {@ פורמט מעצב פרטי fooFormatter; }

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

6. מסקנה

תארנו את התרחישים שבהם עלינו להבהיר אילו שעועית להזריק. בפרט תיארנו את @מַגְדִיר ביאור והשווה אותה עם דרכים דומות אחרות לקביעת אילו שעועית יש להשתמש.

כרגיל, הקוד השלם למאמר זה זמין באתר GitHub.


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