תכונת חיווט אוטומטי של מסגרת קפיץ מאפשרת לך להחדיר את התלות באובייקט באופן מרומז. זה משתמש פנימי בהזרקת מקבע או קונסטרוקטור.
לא ניתן להשתמש בחיווט אוטומטי להזרקת ערכי פרימיטיביים וערכי מחרוזת. זה עובד עם התייחסות בלבד.
היתרון של חיווט אוטומטי
זה דורש את פחות קוד כי אנחנו לא צריכים לכתוב את הקוד כדי להחדיר את התלות במפורש.
חסרון של Autowiring
אין שליטה על מתכנת.
לא ניתן להשתמש בו עבור ערכי פרימיטיביים וערכי מחרוזת.
מצבי חיווט אוטומטי
ישנם מצבי חיווט אוטומטי רבים:
מיון בועות באלגוריתם
לא. | מצב | תיאור |
---|---|---|
1) | לא | זהו מצב החיווט האוטומטי המוגדר כברירת מחדל. זה אומר שאין ברירת מחדל של חיווט אוטומטי. |
2) | לפי שם | מצב byName מזריק את התלות באובייקט לפי שם השעועית. במקרה כזה, שם הנכס ושם השעועית חייבים להיות זהים. זה קורא באופן פנימי לשיטת קובע. |
3) | לפי סוג | מצב byType מזריק את התלות באובייקט לפי סוג. אז שם הנכס ושם השעועית יכולים להיות שונים. זה קורא באופן פנימי לשיטת קבע. |
4) | בַּנַאִי | מצב הבנאי מזריק את התלות על ידי קריאה לבנאי המחלקה. זה קורא לבנאי שיש לו מספר רב של פרמטרים. |
5) | זיהוי אוטומטי | זה הוצא משימוש מאז האביב 3. |
דוגמה לחיווט אוטומטי
בוא נראה את הקוד הפשוט לשימוש אוטומטי בחיווט באביב. אתה צריך להשתמש בתכונה autowire של אלמנט שעועית כדי להחיל את מצבי autowire.
בואו נראה את הדוגמה המלאה של חיווט אוטומטי באביב. כדי ליצור דוגמה זו, יצרנו 4 קבצים.
- B.java
- A.java
- applicationContext.xml
- Test.java
מחלקה זו מכילה בנאי ושיטה בלבד.
package org.sssit; public class B { B(){System.out.println('b is created');} void print(){System.out.println('hello b');} }A.java
מחלקה זו מכילה הפניה של מחלקה B ובנאי ומתודה.
package org.sssit; public class A { B b; A(){System.out.println('a is created');} public B getB() { return b; } public void setB(B b) { this.b = b; } void print(){System.out.println('hello a');} void display(){ print(); b.print(); } }applicationContext.xml
Test.java
מחלקה זו מקבלת את השעועית מהקובץ applicationContext.xml וקוראת לשיטת התצוגה.
package org.sssit; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext('applicationContext.xml'); A a=context.getBean('a',A.class); a.display(); } }
תְפוּקָה:
b is created a is created hello a hello b
1) מצב חיווט אוטומטי לפי שם
במקרה של מצב חיווט אוטומטי של byName, מזהה שעועית ושם הפניה חייבים להיות זהים.
זה עושה שימוש פנימי בהזרקת סטטר.
rj12 לעומת rj11
אבל, אם תשנה את השם של שעועית, זה לא יזריק את התלות.
בוא נראה את הקוד שבו אנו משנים את שם השעועית מ-b ל-b1.
2) מצב חיווט אוטומטי לפי סוג
במקרה של מצב חיווט אוטומטי של byType, מזהה השעועית ושם ההפניה עשויים להיות שונים. אבל חייבת להיות רק שעועית אחת מסוג.
זה עושה שימוש פנימי בהזרקת סטטר.
במקרה זה, זה עובד מצוין כי יצרת מופע מסוג B. זה לא משנה שיש לך שם שעועית שונה משם הפניה.
אבל, אם יש לך שעועית מרובות מסוג אחד, זה לא יעבוד ויזרוק חריג.
בוא נראה את הקוד שבו יש הרבה שעועית מסוג B.
במקרה כזה, זה יזרוק חריג.
3) מצב חיווט אוטומטי של קונסטרוקטור
במקרה של מצב חיווט אוטומטי של קונסטרוקטור, מיכל קפיץ מזריק את התלות על ידי הבנאי בעל הפרמטר הגבוה ביותר.
אם יש לך 3 בנאים במחלקה, zero-arg, one-arg ו- two-arg אז הזרקה תתבצע על ידי קריאה לבנאי two-arg.
4) אין מצב חיווט אוטומטי
במקרה של אין מצב חיווט אוטומטי, מיכל קפיץ אינו מזריק את התלות באמצעות חיווט אוטומטי.