Bahar - Bağımlılık Enjeksiyonu

Her Java tabanlı uygulamanın, son kullanıcının çalışan bir uygulama olarak gördüklerini sunmak için birlikte çalışan birkaç nesnesi vardır. Karmaşık bir Java uygulaması yazarken, bu sınıfları yeniden kullanma olasılığını artırmak ve birim testi sırasında bunları diğer sınıflardan bağımsız olarak test etmek için uygulama sınıfları diğer Java sınıflarından olabildiğince bağımsız olmalıdır. Bağımlılık Enjeksiyonu (veya bazen kablolama olarak adlandırılır), bu sınıfların birbirine yapıştırılmasına ve aynı zamanda bağımsız kalmasına yardımcı olur.

Metin düzenleyici bileşeni olan bir uygulamanız olduğunu ve bir yazım denetimi sağlamak istediğinizi düşünün. Standart kodunuz şuna benzer -

public class TextEditor {
   private SpellChecker spellChecker;
   
   public TextEditor() {
      spellChecker = new SpellChecker();
   }
}

Burada yaptığımız şey, TextEditor ve SpellChecker arasında bir bağımlılık yaratmaktır. Kontrol senaryosunun tersine çevrilmesinde, bunun yerine şöyle bir şey yapardık -

public class TextEditor {
   private SpellChecker spellChecker;
   
   public TextEditor(SpellChecker spellChecker) {
      this.spellChecker = spellChecker;
   }
}

Burada TextEditor, SpellChecker uygulaması konusunda endişelenmemelidir. SpellChecker bağımsız olarak uygulanacak ve TextEditor somutlaştırması sırasında TextEditor'a sağlanacaktır. Tüm bu prosedür, Spring Framework tarafından kontrol edilmektedir.

Burada, TextEditor'dan toplam kontrolü kaldırdık ve onu başka bir yerde tuttuk (yani XML yapılandırma dosyası) ve bağımlılık (yani, SpellChecker sınıfı) TextEditor sınıfına bir Class Constructor. Bu nedenle, bağımlılıkları bazı harici sistemlere etkin bir şekilde delege ettiğiniz için kontrol akışı Bağımlılık Enjeksiyonu (DI) tarafından "tersine çevrilmiştir".

Bağımlılığı enjekte etmenin ikinci yöntemi, Setter MethodsBir SpellChecker örneği oluşturacağımız TextEditor sınıfının. Bu örnek, TextEditor'ın özelliklerini başlatmak için setter yöntemlerini çağırmak için kullanılacaktır.

Bu nedenle, DI iki ana varyantta mevcuttur ve aşağıdaki iki alt bölüm her ikisini de örneklerle kapsayacaktır -

Sr.No. Bağımlılık Enjeksiyon Türü ve Açıklaması
1 Yapıcı tabanlı bağımlılık ekleme

Oluşturucu tabanlı DI, kapsayıcı, her biri diğer sınıfa bağımlılığı temsil eden bir dizi argümana sahip bir sınıf oluşturucuyu çağırdığında gerçekleştirilir.

2 Ayarlayıcı tabanlı bağımlılık ekleme

Ayarlayıcı tabanlı DI, fasulyenizi başlatmak için argümansız bir kurucu veya argümansız statik fabrika yöntemi çağrıldıktan sonra fasulyelarınızda ayarlayıcı yöntemlerini çağıran konteyner tarafından gerçekleştirilir.

Hem Oluşturucu tabanlı hem de Ayarlayıcı tabanlı DI'yi karıştırabilirsiniz, ancak zorunlu bağımlılıklar için yapıcı bağımsız değişkenlerini ve isteğe bağlı bağımlılıklar için ayarlayıcıları kullanmak iyi bir kuraldır.

Kod, DI ilkesiyle daha temizdir ve nesnelere bağımlılıkları sağlandığında ayırma daha etkilidir. Nesne bağımlılıklarına bakmaz ve bağımlılıkların yerini veya sınıfını bilmez, bunun yerine her şey Spring Framework tarafından halledilir.