אביב @ ביאור ראשוני
1. סקירה כללית
במדריך מהיר זה נדון באביב @יְסוֹדִי ביאור שהוצג עם גרסת 3.0 של המסגרת.
פשוט שים, אנו משתמשים @יְסוֹדִי לתת עדיפות גבוהה יותר לשעועית כשיש מספר שעועית מאותו סוג.
בואו נתאר את הבעיה בפירוט.
2. למה כן @יְסוֹדִי נָחוּץ?
במקרים מסוימים, עלינו לרשום יותר מפול אחד מאותו סוג.
בדוגמה זו יש לנו עובד ג'ון () ו עובד עובד () שעועית של עוֹבֵד סוּג:
@ תצורה מחלקה ציבורית Config {@ שעובד ציבורי שעובד ג'ון עובד () {להחזיר עובד חדש ("ג'ון"); } @ עובד שעובד ציבורי TonyEmployee () {להחזיר עובד חדש ("טוני"); }}
האביב זורק NoUniqueBeanDefinitionException אם ננסה להריץ את היישום.
כדי לגשת לשעועית מאותו הסוג בו אנו משתמשים בדרך כלל @Qualifier ("שם שעועית") ביאור.
אנו מיישמים אותו בנקודת ההזרקה יחד עם @Autowired. במקרה שלנו, אנו בוחרים את השעועית בשלב התצורה כך @מַגְדִיר לא ניתן ליישם כאן. אנחנו יכולים ללמוד עוד על @מַגְדִיר ביאור באמצעות הקישור.
כדי לפתור בעיה זו אביב מציע את @יְסוֹדִי ביאור.
3. השתמש @יְסוֹדִי עם @אפונה
בואו נסתכל על מחלקת התצורה:
@Configuration Class class config {@Bean עובד ציבורי JohnEmployee () {להחזיר עובד חדש ("John"); } @Bean @ עובד ציבורי ראשוני טוני עובד () {להחזיר עובד חדש ("טוני"); }}
אנו מסמנים עובד עובד () שעועית עם @יְסוֹדִי. האביב יזריק עובד עובד () שעועית מעדיפה על פני עובד ג'ון ().
עכשיו בואו נתחיל את הקשר היישום ונקבל את עוֹבֵד שעועית מזה:
AnnotationConfigApplicationContext context = חדש AnnotationConfigApplicationContext (Config.class); עובד שכיר = context.getBean (שכיר עובד); System.out.println (עובד);
לאחר הפעלת היישום:
עובד {name = 'Tony'}
מהפלט אנו יכולים לראות כי ה- עובד עובד () למופע יש העדפה בזמן חיווט אוטומטי.
4. השתמש @יְסוֹדִי עם @רְכִיב
אנו יכולים להשתמש ב- @ Primary ישירות על השעועית. בואו נסתכל על התרחיש הבא:
מנהל ממשק ציבורי {מחרוזת getManagerName (); }
יש לנו מנהל ממשק ושתי שעועית תת-מחלקה, מנהל מחלקה:
@Component מחלקה ציבורית מחלקת יישומים DepartmentManager {@Override Public String getManagerName () {return "מנהל מחלקה"; }}
וה מנהל כללי אפונה:
@Component @ מחלקה ציבורית ראשונית GeneralManager מיישם את המנהל {@Override public String getManagerName () {להחזיר "General Manager"; }}
שניהם עוקפים את getManagerName () של ה מנהל מִמְשָׁק. כמו כן, שים לב שאנו מסמנים את מנהל כללי שעועית עם @יְסוֹדִי.
הפעם, @יְסוֹדִי הגיוני רק כאשר אנו מאפשרים את סריקת הרכיבים:
@Configuration @ComponentScan (basePackages = "org.baeldung.primary") תצורה בכיתה ציבורית {}
בואו ניצור שירות לשימוש בהזרקת תלות בזמן שנמצא את השעועית הנכונה:
@Service בכיתה ציבורית ManagerService {@ מנהל פרטי פרטי ממונה; מנהל ציבורי getManager () {מנהל החזרה; }}
הנה, שני הקטניות מנהל מחלקה ו מנהל כללי זכאים לחיווט אוטומטי.
כפי שסימנו מנהל כללי שעועית עם @יְסוֹדִי, הוא ייבחר להזרקת תלות:
שירות ManagerService = context.getBean (ManagerService.class); מנהל מנהל = service.getManager (); System.out.println (manager.getManagerName ());
התפוקה היא "מנהל כללי".
5. מסקנה
במאמר זה למדנו על אביבים @יְסוֹדִי ביאור. בדוגמאות הקוד הדגמנו את הצורך ואת מקרי השימוש של ה- @יְסוֹדִי.
כרגיל, הקוד השלם למאמר זה זמין בפרויקט GitHub.