Bağımlılık Enjeksiyonu (DI), uygulamayı yönetmeyi ve test etmeyi kolaylaştıracak şekilde programlama kodundaki bağımlılığı ortadan kaldıran bir tasarım modelidir. Dependency Injection, programlama kodumuzun gevşek bir şekilde bağlı olmasını sağlar. DI'yi daha iyi anlamak için önce Bağımlılık Aramasını (DL) anlayalım:
Bağımlılık Araması
Bağımlılık Araması, talebin ardından kaynağı aldığımız bir yaklaşımdır. Örneğin kaynağı almanın çeşitli yolları olabilir:
A obj = new AImpl();
Bu şekilde kaynağı (A sınıfının örneğini) doğrudan new anahtar kelimesiyle alırız. Başka bir yol da fabrika yöntemidir:
A obj = A.getA();
Bu şekilde, statik fabrika yöntemi getA()'yı çağırarak kaynağı (A sınıfının örneğini) elde ederiz.
Alternatif olarak, kaynağı JNDI (Java Adlandırma Dizini Arayüzü) aracılığıyla şu şekilde alabiliriz:
Context ctx = new InitialContext(); Context environmentCtx = (Context) ctx.lookup('java:comp/env'); A obj = (A)environmentCtx.lookup('A');
Kaynağı elde etmek için kaynağı elde etmenin çeşitli yolları olabilir. Bu yaklaşımdaki sorunu görelim.
Bağımlılık Arama Sorunları
Bağımlılık aramada esas olarak iki sorun vardır.
Bağımlılık Enjeksiyonu
Bağımlılık Enjeksiyonu, programların bağımlılığını ortadan kaldıran bir tasarım modelidir. Böyle bir durumda bilgiyi XML dosyası gibi harici bir kaynaktan sağlıyoruz. Kodumuzun gevşek bir şekilde bağlanmasını ve test edilmesini kolaylaştırır. Bu durumda kodu şu şekilde yazıyoruz:
class Employee{ Address address; Employee(Address address){ this.address=address; } public void setAddress(Address address){ this.address=address; } }
Böyle bir durumda Adres sınıfının örneği, XML dosyası gibi harici bir kaynaktan ya yapıcı ya da ayarlayıcı yöntemle sağlanır.
Spring çerçevesinde Bağımlılık Enjeksiyonu gerçekleştirmenin iki yolu
Spring çerçevesi bağımlılığı enjekte etmenin iki yolunu sunar
- Yapıcıya göre
- Setter yöntemiyle
Spring Dependency Injection'da gelecek konular
Yapıcıya göre bağımlılık enjeksiyonuYapıcıya göre bağımlılığı nasıl enjekte edebileceğimizi görelim.
Ayarlayıcı yöntemiyle Bağımlılık Enjeksiyonu
Bakalım setter metodu ile bağımlılığı nasıl enjekte edebileceğimizi görelim.