מהי הזרקת תלות? - דע כיצד ליישם הזרקת תלות



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

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

הנושאים הבאים יוסרו במאמר זה:





אז בואו נתחיל במאמר זה.

מהי הזרקת תלות?

הזרקת תלות היא היכולת של אובייקט לספק תלות של אובייקט אחר.



עכשיו, אני די בטוח, יתכן שלא הבנתם שום דבר לפי ההגדרה הטכנית שלעיל. אז תנו לי לנקות את הבלבול בשבילכם.

כשאתה שומע את המונח תלות, מה עולה על דעתך?

ברור שמשהו מסתמך על משהו אחר לתמיכה נכון?



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

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

סוגי חוגים - מהי הזרקת תלות - אדוריקה

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

  • מחלקת לקוחות: זהו המעמד התלוי ותלוי במחלקת השירות.

  • מחלקת שירות: מחלקה זו מספקת שירות למחלקת הלקוחות.

  • מחלקה למזרק: מחלקה זו אחראית על הזרקת אובייקט מחלקת השירות למחלקת הלקוחות

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

היפוך שליטה

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

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

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

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

סוגי הזרקת תלות

ישנם בעיקר שלושה סוגים של הזרקת תלות:

  • הזרקת קונסטרוקטור: בסוג זה של הזרקה, המזרק מספק תלות באמצעות בנאי מחלקת הלקוחות.

  • הזרקת סתר / הזרקת נכס: בסוג זה של הזרקה, שיטת המזריק מזריקה את התלות לשיטת הקובע שנחשפה על ידי הלקוח.

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

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

היתרונות של הזרקת תלות

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

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

כעת, אם החברה רוצה לשמור הודעות טקסט ושמע, האם לדעתך מחלקה זו יכולה לשמור את ההודעה?

ובכן, התשובה היא לא?

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

לכן, אם עלי לסכם את היתרונות של הזרקת תלות, היתרונות הבאים:

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

כיצד ליישם DI באמצעות Spring Boot?

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

כדי להשיג את פרויקט Spring Starter, עליכם להתקין את סוויטת ספרינג מהשוק Eclipse. במקרה שלא מותקנת ב- Spring Too Suite, תוכל לעיין במאמר שלי בנושא .

תראה אוטומטית שקובץ יישום נוצר כמפורט להלן.

שלב 2: לאחר מכן, צור מחלקה באותה חבילה. לשם כך לחץ באמצעות לחצן העכבר הימני על הקובץ -> בחר מעמד והזכיר את שם הכיתה. ואז לחץ על סיים . זה ייצור מעמד קוֹבֶץ. כאן יצרתי שיעור לקוחות. עיין בהמשך.

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

חבילה com.example.demo // שם חבילה class class לקוחות {private int custid private מחרוזת custname private מחרוזת coursename}

שלב 3.1: ברגע שתסיים עם זה, אתה צריך לייצר שיטות גטר וסתר עבור נכסים אלה. לשם כך בחרו במאפיינים אלה ולחצו לחיצה ימנית. אז תבחר מָקוֹר -> צור שיטות גטר וסתר.

הקוד שלך עד כה צריך להיות כדלקמן:

חבילה com.example.demo class class לקוחות {private int custid private String custname private String coursename public int getCustid () {return custid} public void setCustid (int custid) {this.custid = custid} public String getCustname () {return custname } public void setCustname (מחרוזת שם) {this.custname = custname} מחרוזת ציבורית getCoursename () {return coursename} ריק ריק setCoursename (מחרוזת coursename) {this.coursename = coursename}}

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

אז, הבה נבחן כיצד אנו יכולים להשיג את אותו הדבר.

שלב 4: ראשית, שנה את ה- קו ריצה בתוך ה קובץ כיתת יישום לדברים הבאים:

ConfigurableApplicationContext context = SpringApplication.run (DemoApplication.class, args)

הערה: אם נתקלת בשגיאה ייבא את הדברים הבאים:

יבוא org.springframework.boot.SpringApplication ייבא org.springframework.boot.autoconfigure.SpringBootApplication ייבוא ​​org.springframework.context.ConfigurableApplicationContext

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

לקוחות c = context.getBean (clients.class)

השורה הנ'ל, תגיד למהדר להחזיר אובייקט ממעמד הלקוחות. עיין בהמשך.

שלב 4.1: עכשיו, כדי לבדוק אם זה עובד או לא, אתה יכול לחזור למחלקת הלקוחות והוסף שיטה באופן הבא:

תצוגת חלל ציבורית () {System.out.println ('האובייקט הוחזר בהצלחה')}

בשיטה זו תוצג פלט 'אובייקט הוחזר בהצלחה' בעת ביצוע מוצלח.

שלב 4.2: לאחר מכן, עליך לחזור לקובץ היישום ולהזכיר את הדברים הבאים:

c. תצוגה ()

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

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

שלב 4.3: לכן, כדי לומר למכל האביב את זה, אנו זקוקים לאובייקט של מחלקת הלקוחות. לשם כך, עליך להזכיר את ה- ביאור @ רכיב , במחלקת הלקוחות. הקוד בשיעור לקוחות צריך להיות כמו להלן:

חבילה com.example.demo יבוא org.springframework.stereotype.Component @Component class class לקוחות {private int custid private String custname private String coursename public int getCustid () {return custid} public void setCustid (int custid) {this.custid = custid} מחרוזת ציבורית getCustname () {return custname} public void setCustname (מחרוזת custname) {this.custname = custname} ציבורי מחרוזת getCoursename () {return coursename} public void setCoursename (String coursename) {this.coursename = coursename} public public ריק תצוגה () {System.out.println ('האובייקט הוחזר בהצלחה')}}

ואז, כשאתה מזכיר לקוחות c = context.getBean (clients.class) המהדר יבדוק אם קיימת שעועית לקוח במיכל או לא.

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

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

כך בעצם תוכלו ליישם הזרקת תלות.

דוגמה: הזרקת תלות באמצעות הערה קווית אוטומטית

אני מקווה שהבנת כיצד עובדת הזרקת תלות במגף האביב. כעת, הבה נרחיב דוגמה זו ונראה כיצד מחלקה התלויה במחלקה השנייה השתמשה בפונקציות של אותה מעמד ב- Spring Boot.

שלב 1: ליצור חדש קובץ כיתה , שוב לחיצה ימנית על החבילה ועל ידי בחירה חדש -> כיתה. כעת הזכר את שם הכיתה להלן ולחץ על סיים.

כיצד לבדוק את הפלינדרום בג'אווה - -

שלב 2: לאחר מכן, הבה נכניס כמה נכסים לשיעור. אז, נניח, אנו כוללים TechID, טכניקה. ציין את הקוד למטה.

חבילה com.example.demo מחלקה ציבורית טכנולוגיות {פרטי int techid פרטי מחרוזת טכניקה}

שלב 2.1: לאחר שתסיים עם זה, צור שיטות גטר וסתר עבור מאפיינים אלה על ידי לחיצה ימנית על הקובץ ואז בחר מקור -> צור שיטות גטר וסתר.

שלב 3: עכשיו, נניח, עלינו ליצור שיטה שמדפיסה ' מוּצלָח '. לשם כך אזכור את הקוד:

public void tech () {System.out.println ('מצליח')}

הקוד שלך עד עכשיו אמור להיראות כך למטה:

חבילה com.example.demo מחלקה ציבורית טכנולוגיות {private int techid פרטי מחרוזת טכניקה ציבורית int getTechid () {להחזיר techid} public void setTechid (int techid) {this.techid = techid} public String getTechname () {return techname} public public setTechname (טכניקת מחרוזת) {this.techname = techname} tech tech בטל () {System.out.println ('מצליח')}}

שלב 4: עכשיו, להתקשר ל שיטת tech () בתוך ה מחלקת לקוחות , עליך ליצור אובייקט של מחלקת הטכנולוגיות. אז ציינו את שורת הקוד הבאה בשיעור הלקוחות:

פרטי טכנולוגיה טכנולוגית

שלב 4.1: לאחר שתסיים עם זה, צור שיטות גטר וסתר עבור נכסים אלה מאת לחיצה ימנית על הקובץ ואז בחר מקור -> צור שיטות גטר וסתר.

שלב 5: לאחר מכן, להשתמש ב- שיטת tech () אתה צריך להזכיר techdetail.tech () תחת שיטת תצוגה של מחלקת הלקוחות . כמו כן, כדי לוודא שהאובייקט techdetail הוא אזכור מיידי ביאור @ רכיב האם ה כיתת טכנולוגיות. עיין בהמשך.

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

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

חבילה com.example.demo יבוא org.springframework.beans.factory.annotation.Autowired ייבוא ​​org.springframework.stereotype.Component @Component ציבורי לקוחות לקוחות {private int custid private String custname private ) {return techdetail} public void setTechdetail (Technologies techdetail) {this.techdetail = techdetail} public int getCustid () {return custid} public void setCustid (int custid) {this.custid = custid} public String getCustname () {return custname } בטל ציבורי setCustname (שם מחרוזת) {this.custname = custname} מחרוזת ציבורית getCoursename () {return coursename} public void setCoursename (מחרוזת coursename) {this.coursename = coursename} תצוגה ריקה ציבורית () {System.out.println ( 'אובייקט הוחזר בהצלחה') techdetail.tech ()}}

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

עכשיו כשסיימתם את המאמר, עיינו ב מאת אדוריקה, חברת למידה מקוונת מהימנה עם רשת של יותר מ -250,000 לומדים מרוצים הפזורים ברחבי העולם.

יש לך שאלה עבורנו? אנא הזכיר זאת בסעיף ההערות של 'מהי הזרקת תלות?' ' מאמר ונחזור אליך בהקדם האפשרי.