אביב - הזרקת אוספים

1. הקדמה

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

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

2. רשימה עם @Autowired

בואו ליצור שעועית לדוגמא:

מחלקה ציבורית CollectionsBean {@Autowired רשימת שמות פרטיים; חלל ציבורי printNameList () {System.out.println (nameList); }}

הנה, הכרזנו על רשימת שמות נכס להחזיק א רשימה שֶׁל חוּט ערכים.

בדוגמה זו אנו משתמשים בהזרקת שדה עבור רשימת שמות. לכן, שמנו את @Autowired ביאור.

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

לאחר מכן אנו רושמים את CollectionsBean בשיעור הגדרת התצורה:

@Configuration מחלקה ציבורית CollectionConfig {@Bean Collections CollectionsBean getCollectionsBean () {החזר CollectionsBean חדש (); } @Bean רשימת ציבורי nameList () {return Arrays.asList ("ג'ון", "אדם", "הארי"); }}

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

כעת נוכל לבדוק את התוצאות:

ApplicationContext context = AnnotationConfigApplicationContext חדש (CollectionConfig.class); CollectionsBean collectionBean = context.getBean (CollectionsBean.class); collectionBean.printNameList ();

הפלט של שיטת printNameList ():

[ג'ון, אדם, הארי]

3. מַעֲרֶכֶת עם הזרקת קונסטרוקטור

כדי להגדיר את אותה דוגמה עם מַעֲרֶכֶת אוסף, בואו לשנות את CollectionsBean מעמד:

מחלקה ציבורית CollectionsBean {private Set nameSet; CollectionsBean ציבורי (הגדר מחרוזות) {this.nameSet = מחרוזות; } חלל ציבורי printNameSet () {System.out.println (nameSet); }}

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

@Bean Collections CollectionsBean getCollectionsBean () {להחזיר CollectionsBean חדשים (HashSet חדש (Arrays.asList ("ג'ון", "אדם", "הארי"))); }

4. מַפָּה עם הזרקת סתר

בעקבות אותה היגיון, בואו נוסיף את nameMap שדה להדגמת הזרקת המפה:

מחלקה ציבורית CollectionsBean {Map name name Map; @Autowired חלל ציבורי setNameMap (Map nameMap) {this.nameMap = nameMap; } חלל ציבורי printNameMap () {System.out.println (nameMap); }}

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

@Bean מפה מפה ציבורית () {Map nameMap = חדש HashMap (); nameMap.put (1, "John"); nameMap.put (2, "אדם"); nameMap.put (3, "הארי"); להחזיר nameMap; }

התוצאות לאחר הפעלת ה- printNameMap () שיטה:

{1 = ג'ון, 2 = אדם, 3 = הארי}

5. הזרקת הפניות לשעועית

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

ראשית, בואו ניצור את השעועית:

מעמד ציבורי BaeldungBean {שם מחרוזת פרטי; // בונה}

ולהוסיף א רשימה שֶׁל BaeldungBean כרכוש ל CollectionsBean מעמד:

מחלקה ציבורית CollectionsBean {@Autowired (חובה = שקר) beanList פרטי; חלל ציבורי printBeanList () {System.out.println (beanList); }}

לאחר מכן, אנו מוסיפים את שיטות המפעל להגדרת התצורה של Java עבור כל אחת מהן BaeldungBean אֵלֵמֶנט:

@Configuration class class CollectionConfig {@Bean public BaeldungBean getElement () {להחזיר BaeldungBean חדש ("ג'ון"); } @Bean הציבור BaeldungBean getAnotherElement () {להחזיר BaeldungBean חדש ("אדם"); } @Bean הציבור BaeldungBean getOneMoreElement () {להחזיר BaeldungBean חדש ("הארי"); } // שיטות מפעל אחרות}

מיכל האביב מזריק את השעועית האישית של BaeldungBean הקלד לאוסף אחד.

כדי לבדוק זאת, אנו קוראים את collectionBean.printBeanList () שיטה. הפלט מציג את שמות השעועית כאלמנטים ברשימה:

[ג'ון, הארי, אדם]

עַכשָׁיו, בואו ניקח בחשבון תרחיש כשאין BaeldungBean. אם אין BaeldungBean רשום בהקשר היישום, אביב ישליך חריג מכיוון שהתלות הנדרשת חסרה.

אנחנו יכולים להשתמש @Autowired (חובה = שקר) כדי לסמן את התלות כאופציונלית. במקום לזרוק חריג, ה- beanList לא יאותחל וערכו יישאר ריק.

אם אנחנו צריכים רשימה ריקה במקום ריק, אנחנו יכולים לאתחל beanList עם חדש רשימת מערך:

@Autowired (חובה = שקר) רשימה פרטית beanList = ArrayList חדש ();

5.1. באמצעות @להזמין למיון שעועית

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

לשם כך אנו משתמשים ב- @להזמין ביאור וציין את האינדקס:

@Configuration בכיתה ציבורית CollectionConfig {@Bean @Order (2) get BaudungBean getElement () {החזר BaeldungBean חדש ("ג'ון"); } @Bean @Order (3) BaeldungBean הציבור getAnotherElement () {להחזיר BaeldungBean חדש ("אדם"); } @Bean @ Order (1) BaeldungBean הציבור getOneMoreElement () {להחזיר BaeldungBean חדש ("הארי"); }}

מיכל קפיץ קודם יזריק את השעועית עם השם "לְהָצִיק", מכיוון שהוא בעל ערך ההזמנה הנמוך ביותר.

לאחר מכן הוא יזריק את "ג'ון", ולבסוף, ה "אדם" אפונה:

[הארי, ג'ון, אדם]

למידע נוסף על @להזמין במדריך זה.

5.2. באמצעות @מַגְדִיר כדי לבחור שעועית

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

כך אנו משתמשים בו לנקודת ההזרקה:

@Autowired @Qualifier ("CollectionsBean") רשימה פרטית beanList;

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

@Configuration מחלקה ציבורית CollectionConfig {@Bean @Qualifier ("CollectionsBean") ציבורי BaeldungBean getElement () {להחזיר BaeldungBean חדש ("ג'ון"); } @Bean הציבור BaeldungBean getAnotherElement () {להחזיר BaeldungBean חדש ("אדם"); } @Bean הציבור BaeldungBean getOneMoreElement () {להחזיר BaeldungBean חדש ("הארי"); } // שיטות מפעל אחרות}

בדוגמה זו אנו מציינים כי השעועית עם השם "ג'ון" יוחדר לתוך רשימה נקרא “CollectionsBean”. התוצאות שאנו בודקים כאן:

ApplicationContext context = AnnotationConfigApplicationContext חדש (CollectionConfig.class); CollectionsBean collectionBean = context.getBean (CollectionsBean.class); collectionBean.printBeanList ();

מהפלט אנו רואים כי לאוסף שלנו יש רק אלמנט אחד:

[ג'ון]

6. הגדרת רשימה ריקה כערך ברירת מחדל

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

מחלקה ציבורית CollectionsBean {@Value ("$ {names.list:} # {T (java.util.Collections) .emptyList ()}") שם פרטי רשימהListWithDefaultValue; בטל ציבורי printNameListWithDefaults () {System.out.println (nameListWithDefaultValue); }}

אם אנו מריצים זאת עם המקש "names.list" שלא מאותחל באמצעות קובץ המאפיינים:

collectionBean.printNameListWithDefaults ();

נקבל רשימה ריקה כפלט:

[ ]

7. סיכום

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

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

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