Τι είναι η έγχυση εξάρτησης; - Μάθετε πώς να εφαρμόσετε την εξάρτηση εγχύσεων



Αυτό το άρθρο σχετικά με το What is Dependency Injection είναι ένας ολοκληρωμένος οδηγός για το Dependency Injection με ένα Hands-On Spring Boot.

Σε έναν κόσμο όπου εργαζόμαστε με γλώσσες προγραμματισμού καθημερινά, όλοι μας τείνουμε να αναζητούμε μεθόδους και κόλπα για να κάνουμε τη ζωή μας εύκολη. Λοιπόν, το Dependency Injection είναι μια τέτοια τεχνική που στοχεύει να βοηθήσει τον κώδικα προγραμματιστή εύκολα παρέχοντας εξαρτήσεις ενός άλλου αντικειμένου. Σε αυτό το άρθρο σχετικά με το What is Dependency Injection, θα σας βοηθήσω να κατανοήσετε λεπτομερώς αυτήν την τεχνική.

Τα ακόλουθα θέματα θα καλυφθούν σε αυτό το άρθρο:





Ας ξεκινήσουμε λοιπόν με αυτό το άρθρο.

Τι είναι η έγχυση εξάρτησης;

Dependency Injection είναι η ικανότητα ενός αντικειμένου να παρέχει εξαρτήσεις ενός άλλου αντικειμένου.



Τώρα, είμαι πολύ σίγουρος, ίσως να μην έχετε καταλάβει τίποτα από τον παραπάνω τεχνικό ορισμό. Λοιπόν, επιτρέψτε μου να ξεκαθαρίσω τη σύγχυση για εσάς.

Όταν ακούτε τον όρο εξάρτηση, τι έρχεται στο μυαλό σας;

Προφανώς, κάτι που βασίζεται σε κάτι άλλο για υποστήριξη, σωστά;



Λοιπόν, το ίδιο ισχύει και για τον προγραμματισμό.

Η εξάρτηση στον προγραμματισμό είναι μια προσέγγιση όπου μια τάξη χρησιμοποιεί συγκεκριμένες λειτουργίες μιας άλλης τάξης. Έτσι, για παράδειγμα, αν λάβετε υπόψη δύο κατηγορίες Α και Β, και λέτε ότι η κλάση Α χρησιμοποιεί λειτουργίες της κλάσης Β, τότε συνεπάγεται ότι η κλάση Α έχει εξάρτηση από την τάξη Β. Τώρα, εάν κωδικοποιείτε στην Java τότε πρέπει να γνωρίζετε αυτό, πρέπει ναδημιουργήστε μια παρουσία της κλάσης Β πριν τα αντικείμενα χρησιμοποιηθούν από την κατηγορία Α.

Τύποι τάξεων - Τι είναι η έγχυση εξάρτησης - Edureka

Επομένως, εάν πρέπει να καθορίσω τώρα το Dependency Injection για εσάς, τότε η διαδικασία δημιουργίας ενός αντικειμένου για κάποια άλλη τάξη και να αφήσετε την τάξη να χρησιμοποιεί απευθείας την εξάρτηση ονομάζεται Dependency Injection. Περιλαμβάνει κυρίως τρεις κατηγορίες:

  • Κατηγορία Πελάτη: Αυτή είναι η εξαρτώμενη τάξη και εξαρτάται από την κλάση υπηρεσίας.

  • Κατηγορία υπηρεσιών: Αυτή η τάξη παρέχει μια υπηρεσία στην κατηγορία πελατών.

  • Κατηγορία εγχυτήρων: Αυτή η τάξη είναι υπεύθυνη για την έγχυση του αντικειμένου κλάσης υπηρεσίας στην κλάση πελάτη

Τώρα, που έχετε καταλάβει, τι είναι το Dependency Injection, επιτρέψτε μου να σας ακολουθήσω στη συνέχεια την αρχή στην οποία βασίζεται η Dependency Injection.

Αντιστροφή του ελέγχου

Όπως ανέφερα παραπάνω, το Inversion of Control είναι μια αρχή βάσει της οποίας γίνεται η Εξάρτηση Έγχυσης. Επίσης, όπως υποδηλώνει το όνομα, το Inversion of Control χρησιμοποιείται βασικά για την αναστροφή διαφορετικών ειδών πρόσθετων ευθυνών μιας τάξης και όχι της κύριας ευθύνης.

Αν πρέπει να σας εξηγήσω με απλούστερους όρους, τότε σκεφτείτε ένα παράδειγμα, όπου έχετε τη δυνατότητα να μαγειρέψετε. Σύμφωνα με την αρχή του IoC, μπορείτε να αντιστρέψετε τον έλεγχο, οπότε αντί να μαγειρεύετε φαγητό, μπορείτε απλώς να παραγγείλετε απευθείας από έξω, όπου λαμβάνετε φαγητό στο κατώφλι σας. Έτσι, η διαδικασία φαγητού που σας παραδίδεται στο κατώφλι σας ονομάζεται αντιστροφή του ελέγχου.

Δεν χρειάζεται να μαγειρέψετε τον εαυτό σας, αντ 'αυτού, μπορείτε να παραγγείλετε το φαγητό και να αφήσετε ένα στέλεχος παράδοσης, να σας παραδώσει το φαγητό. Με αυτόν τον τρόπο, δεν χρειάζεται να φροντίζετε τις πρόσθετες ευθύνες και να εστιάζετε μόνο στο κύριο έργο.

Τώρα, που γνωρίζετε την αρχή πίσω από το Dependency Injection, επιτρέψτε μου να σας καθοδηγήσω στους τύπους της Dependency Injection.

Τύποι εγχύσεων εξάρτησης

Υπάρχουν κυρίως τρεις τύποι εγχύσεων εξάρτησης:

  • Έγχυση κατασκευαστή: Σε αυτόν τον τύπο ένεσης, ο εγχυτής παρέχει εξάρτηση μέσω του κατασκευαστή κλάσης πελάτη.

  • Έγχυση ρυθμιστή / Έγχυση ιδιοκτησίας: Σε αυτόν τον τύπο ένεσης, η μέθοδος εγχυτήρα εγχέει την εξάρτηση από τη μέθοδο ρύθμισης που εκτίθεται από τον πελάτη.

  • Έγχυση διεπαφής: Σε αυτόν τον τύπο ένεσης, ο εγχυτής χρησιμοποιεί το Interface για να παρέχει εξάρτηση στην κατηγορία πελατών. Οι πελάτες πρέπει να εφαρμόσουν μια διεπαφή που θα εκθέσειμέθοδος ρυθμιστήοι οποίεςαποδέχεται την εξάρτηση.

Μέχρι τώρα, ελπίζω να έχετε καταλάβει το γεγονός ότι το Dependency Injection είναι υπεύθυνο για τη δημιουργία αντικειμένων, για να καταλάβετε ποιες κλάσεις απαιτούν αυτά τα αντικείμενα και τελικά να παρέχετε σε αυτές τις κατηγορίες τα αντικείμενα. Λοιπόν, σε αυτό το σημείωμα, ας δούμε στη συνέχεια τα οφέλη του Dependency Injection.

Οφέλη από την εξάρτηση από την έγχυση

Πριν αναφέρω τα οφέλη του Dependency Injection, επιτρέψτε μου να σας εξηγήσω την ανάγκη για αυτήν την ένεση σε βιομηχανικό επίπεδο, για να σας βοηθήσω να κατανοήσετε καλύτερα τα οφέλη.

Εξετάστε ένα σενάριο, στο οποίο έχετε μια τάξη ηλεκτρονικού ταχυδρομείου, της οποίας αποκλειστική ευθύνη είναι να φροντίζετε τα μηνύματα ηλεκτρονικού ταχυδρομείου που λαμβάνονται. Τώρα, αυτή η τάξη θα έχει αντικείμενα όπως 'Προς διεύθυνση email', 'Από διεύθυνση email', 'Θέμα και το σώμα του email'.

Τώρα, εάν η εταιρεία θέλει να αποθηκεύσει μηνύματα κειμένου και ήχου, πιστεύετε ότι αυτή η τάξη μπορεί να αποθηκεύσει το μήνυμα;

Λοιπόν, η απάντηση είναι όχι;

Αυτό συμβαίνει επειδή, η κλάση email δεν μπορεί να χειριστεί τις παραμέτρους του κειμένου και των ηχητικών μηνυμάτων. Σε τέτοιες περιπτώσεις, θα πρέπει να ξαναδημιουργήσετε το μάθημα. Τώρα, η αναδημιουργία του μαθήματος είναι αρκετά δύσκολη δουλειά, ειδικά αν πρέπει να το κάνετε τακτικά. Αντ 'αυτού, εάν χρησιμοποιείτε το Dependency Injection, μπορείτε να αλλάξετε τα αντικείμενα κατά το χρόνο εκτέλεσης. Έτσι, με αυτόν τον τρόπο, δεν χρειάζεται να ξαναδημιουργήσετε το μάθημα που σας βοηθά περαιτέρω με πολλούς τρόπους.

Επομένως, εάν πρέπει να συνοψίσω τα οφέλη της ένεσης εξάρτησης, τότε είναι τα ακόλουθα οφέλη:

Εντάξει, οπότε τώρα που γνωρίζετε τα οφέλη του Dependency Injection, ας προχωρήσουμε και να δούμε πώς να εφαρμόσουμε το Dependency Injection χρησιμοποιώντας το Spring Boot.

Πώς να εφαρμόσετε DI χρησιμοποιώντας Spring Boot;

Βήμα 1: Ανοιξε το δικό σου Eclipse IDE και δημιουργήστε ένα Εφαρμογή Spring Boot κάνοντας δεξί κλικ και επιλέγοντας Άνοιξη Starter Project . Στη συνέχεια, αναφέρετε το όνομα του έργου και κάντε κλικ στο Φινίρισμα .

Για να αποκτήσετε το Spring Starter Project, πρέπει να εγκαταστήσετε το Spring Tool Suite από το Eclipse Marketplace. Σε περίπτωση που δεν έχετε εγκατεστημένο το Spring Too Suite, μπορείτε να ανατρέξετε στο άρθρο μου στο .

Θα δείτε αυτόματα ότι δημιουργείται ένα αρχείο εφαρμογής όπως παρακάτω.

Βήμα 2: Στη συνέχεια, δημιουργήστε μια τάξη στο ίδιο πακέτο. Για να το κάνετε αυτό κάντε δεξί κλικ στο αρχείο -> επιλέξτε Τάξη και αναφέρω το όνομα τάξης. Στη συνέχεια κάντε κλικ στο Φινίρισμα . Αυτό θα δημιουργήσει ένα Τάξη αρχείο. Εδώ έχω δημιουργήσει μια κατηγορία πελατών. Ανατρέξτε παρακάτω.

Βήμα 3: Μετά από αυτό, ας βάλουμε μερικές ιδιότητες για την τάξη. Ας πούμε λοιπόν, συμπεριλαμβάνουμε Αναγνωριστικό πελάτη, όνομα πελάτη και Όνομα μαθήματος. Αναφέρετε τον παρακάτω κώδικα.

package com.example.demo // όνομα πακέτου δημόσια τάξη Πελάτες {private int custid private String custname private String coursename}

Βήμα 3.1: Μόλις τελειώσετε με αυτό, πρέπει να το κάνετε δημιουργήστε μεθόδους Getter και Setter για αυτές τις ιδιότητες. Για να το κάνετε αυτό, επιλέξτε αυτές τις ιδιότητες και κάντε δεξί κλικ. Στη συνέχεια, επιλέξτε Πηγή -> Δημιουργήστε μεθόδους Getter και Setter.

Ο κωδικός σας μέχρι τώρα θα πρέπει να έχει ως εξής:

package com.example.demo public 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 (String custname) {this.custname = custname} public String getCoursename () {return coursename} public void setCoursename (συμβολοσειρά συμβολοσειράς) {this.coursename = coursename}}

Τώρα, σκεφτείτε ένα σενάριο όπου πρέπει να δημιουργήσετε ένα αντικείμενο για τους πελάτες και δεν θέλετε να το κάνετε χειροκίνητα. Σε ένα τέτοιο σενάριο, θα πρέπει στη συνέχεια να χρησιμοποιήσετε το Dependency Injection, για να λάβετε τα αντικείμενα όποτε το χρειάζεστε.

Ας δούμε λοιπόν πώς μπορούμε να επιτύχουμε το ίδιο.

Βήμα 4: Πρώτα, αλλάξτε το γραμμή εκτέλεσης στο αρχείο κλάσης εφαρμογής στα ακόλουθα:

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

Σημείωση: Εάν λάβετε ένα σφάλμα εισαγάγετε τα εξής:

εισαγωγή org.springframework.boot.SpringApplication εισαγωγή org.springframework.boot.autoconfigure.SpringBootApplication εισαγωγή org.springframework.context.ConfigurableApplicationContext

Αυτή η παραπάνω γραμμή κώδικα θα επιστρέψει ένα αντικείμενο κατά τη στιγμή της εκτέλεσης. Τώρα προσθέστε τον ακόλουθο κώδικα στο αρχείο της εφαρμογής.

πελάτες c = context.getBean (customers.class)

Η παραπάνω γραμμή, θα πει στον μεταγλωττιστή να επιστρέψει ένα αντικείμενο της κλάσης πελατών. Ανατρέξτε παρακάτω.

Βήμα 4.1: Τώρα, για να ελέγξετε αν λειτουργεί ή όχι, εσείς μπορεί να επιστρέψει στην κατηγορία πελατών και προσθέστε μια μέθοδο ως εξής:

δημόσια κενή οθόνη () {System.out.println ('Το αντικείμενο επιστράφηκε επιτυχώς')}

Αυτή η μέθοδος θα εμφανίσει μια έξοδο 'Object Returned επιτυχώς' κατά την επιτυχή εκτέλεση.

Βήμα 4.2: Στη συνέχεια, πρέπει να επιστρέψετε στο αρχείο της εφαρμογής και να αναφέρετε τα εξής:

c. εμφάνιση ()

Μέσω αυτού, καλείτε το αντικείμενο της κλάσης Πελάτες με αναφορά της μεθόδου εμφάνισης. Ανατρέξτε στην παρακάτω εικόνα για τον κωδικό της κλάσης εφαρμογών έως τώρα:

Τώρα, εάν εκτελέσετε το έργο, θα δείτε ένα εξαίρεση Χωρίς χαρακτηριστικό φασόλι τύπου . Αυτό συμβαίνει επειδή η κατηγορία πελατών που έχετε ορίσει δεν είναι Spring Bean, δηλαδή δεν είναι Spring Object. Ανατρέξτε παρακάτω.

Βήμα 4.3: Έτσι, για να πούμε στο Spring Container ότι, χρειαζόμαστε ένα αντικείμενο της κλάσης πελατών. Για να το κάνετε αυτό, πρέπει να αναφέρετε το @ Σχολιασμός στοιχείων , στην κατηγορία πελατών. Ο κωδικός στην κατηγορία Πελάτες πρέπει να είναι ο παρακάτω:

πακέτο com.example.demo εισαγωγή org.springframework.stereotype.Component @Component public 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 (String custname) {this.custname = custname} public String getCoursename () {return coursename} public void setCoursename (String coursename) {this.coursename = coursename} δημόσιο κενό display () {System.out.println ('Το αντικείμενο επιστράφηκε επιτυχώς')}}

Στη συνέχεια, όταν αναφέρετε πελάτες c = konteks.getBean (customers.class) ο μεταγλωττιστής θα ελέγξει εάν υπάρχει διαθέσιμος κόκκος πελάτη στο κοντέινερ ή όχι.

Εάν το Bean είναι διαθέσιμο, τότε το Spring πλαίσιο εισάγει το αντικείμενο πελάτη στην εφαρμογή σας. Έτσι, βασικά, αυτό το αντικείμενο δημιουργείται από το πλαίσιο Spring, το οποίο μπορεί να χρησιμοποιηθεί περαιτέρω στην εφαρμογή.

Έτσι, εάν εκτελέσω αυτό το έργο τώρα, θα δείτε μια έξοδο που το αντικείμενο επέστρεψε με επιτυχία. Ανατρέξτε παρακάτω.

Αυτός είναι βασικά ο τρόπος με τον οποίο μπορείτε να εφαρμόσετε το Dependency Injection.

Παράδειγμα: Έγχυση εξάρτησης με χρήση σχολιασμού Autowired

Ελπίζω να έχετε καταλάβει πώς λειτουργεί το Dependency Injection στο Spring Boot. Τώρα, ας επεκτείνουμε αυτό το παράδειγμα και περαιτέρω να δούμε πώς μια τάξη που εξαρτάται από την άλλη τάξη χρησιμοποίησε τις λειτουργίες αυτής της κλάσης στο Spring Boot.

Βήμα 1: Δημιούργησε ένα νέο αρχείο τάξης , ξανά κάνοντας δεξί κλικ στο πακέτο και το επιλέγοντας Νέο -> Τάξη. Τώρα, αναφέρετε το όνομα της τάξης όπως παρακάτω και κάντε κλικ στο Φινίρισμα.

Βήμα 2: Στη συνέχεια, ας βάλουμε μερικές ιδιότητες για την τάξη. Ας πούμε λοιπόν, συμπεριλαμβάνουμε TechID, Techname. Αναφέρετε τον παρακάτω κώδικα.

package com.example.demo public class Technologies {private int techid private String techname}

Βήμα 2.1: Μόλις τελειώσετε με αυτό, δημιουργήστε Μέθοδοι Getter και Setter για αυτές τις ιδιότητες κάνοντας δεξί κλικ στο αρχείο και μετά επιλέξτε Πηγή -> Δημιουργία μεθόδων Getter and Setter.

Βήμα 3: Τώρα, ας πούμε, πρέπει να δημιουργήσουμε μια μέθοδο που να τυπώνει « Επιτυχής '. Για να το κάνετε αυτό αναφέρετε τον κωδικό:

public void tech () {System.out.println ('Επιτυχής')}

Ο κωδικός σας μέχρι τώρα θα πρέπει να έχει την εξής μορφή:

package com.example.demo public class Technologies {private int techid private String techname public int getTechid () {return techid} public void setTechid (int techid) {this.techid = techid} public String getTechname () {return techname} δημόσιο κενό setTechname (String techname) {this.techname = techname} public void tech () {System.out.println ('Επιτυχής')}}

Βήμα 4: Τώρα, για να καλέσετε το tech () μέθοδος στο κατηγορία πελατών , πρέπει να δημιουργήσετε ένα αντικείμενο της κλάσης τεχνολογιών. Αναφέρετε λοιπόν την ακόλουθη γραμμή κώδικα στην κατηγορία πελατών:

τεχνική λεπτομέρεια ιδιωτικών τεχνολογιών

Βήμα 4.1: Μόλις τελειώσετε με αυτό, δημιουργήστε Μέθοδοι Getter και Setter για αυτές τις ιδιότητες από κάνοντας δεξί κλικ στο αρχείο και μετά επιλέξτε Πηγή -> Δημιουργία μεθόδων Getter and Setter.

Βήμα 5: Στη συνέχεια, για να χρησιμοποιήσετε το tech () μέθοδος , πρέπει να αναφέρετε techdetail.tech () σύμφωνα με το μέθοδο εμφάνισης της κατηγορίας πελατών . Επίσης, για να βεβαιωθείτε ότι το αντικείμενο techdetail είναι instantiated αναφορά @ Σχολιασμός στοιχείων είναι το Κατηγορία τεχνολογιών. Ανατρέξτε παρακάτω.

Τώρα, όταν εκτελείτε αυτό το έργο, θα δείτε ένα Εξαίρεση Null Pointer . Αυτό συμβαίνει επειδή τώρα το Η κλάση πελατών εξαρτάται από την κατηγορία Τεχνολογίες και όμως δεν γνωρίζει την ύπαρξη της κλάσης Τεχνολογίες .

πρόγραμμα συνδεδεμένων λιστών στο γ

Έτσι, για να επιτρέψετε στον Πελάτη να αναγνωρίσει την κλάση Technologies, πρέπει να εισαγάγετε το @ Αυτόματος σχολιασμός στην κατηγορία Πελάτες. Ο τελικός κωδικός της κατηγορίας πελατών θα πρέπει να έχει ως εξής:

package com.example.demo import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component @Component public class Πελάτες {private int custid private String custname private String coursename @Autowired private Technologies techdetail public Technologies getTechdet ) {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 } public void setCustname (String custname) {this.custname = custname} public String getCoursename () {return coursename} public void setCoursename (String coursename) {this.coursename = coursename} δημόσια κενή εμφάνιση () {System.out.println ( 'Το αντικείμενο επιστράφηκε με επιτυχία') techdetail.tech ()}}

Μόλις εκτελέσετε αυτά τα αρχεία, θα δείτε τις εξόδους ως αντικείμενο που επιστρέφεται με επιτυχία και επιτυχία, πράγμα που υποδηλώνει ότι η εξάρτησή μας από τα μαθήματα έχει εκπληρωθεί. Ανατρέξτε παρακάτω.

Τώρα που τελειώσατε με το άρθρο, δείτε το από την Edureka, μια αξιόπιστη διαδικτυακή εταιρεία εκμάθησης με δίκτυο περισσότερων από 250.000 ικανοποιημένων μαθητών σε όλο τον κόσμο.

Έχετε μια ερώτηση για εμάς; Παρακαλώ αναφέρετέ το στην ενότητα σχολίων αυτού του «Τι είναι η Εξάρτηση Ένεση; ' άρθρο και θα επικοινωνήσουμε μαζί σας το συντομότερο δυνατό.