Spring Ders05 - Dependency Injection
Dependency Injenction ( Bağımlılık Enjektesi ) bağımlılıkları dışarıdan vererek sıkı bağımlı programlar yerine gevşek bağımlı programlar yazabilmeyi amaçlar.
Sıkı bağımlı programlarda sınıfların içinde new anahtar kelimesi kullanılarak yeni bir nesne oluşturulur. Oluşturulan nesne o sınıfa bağımlıdır.
Gevşek bağımlı programlarda ise sınıflara dışardan bir nesne enjekte edilir. Böylece o sınıf ve sınıfın içerisine enjekte edilen nesne arasındaki bağ gevşek olmuş olur.
Gevşek bağlı programlardaki nesnelerin güncellenmesi daha kolaydır.
Sıkı bağımlı program
Gevşek bağımlı program ( Dependency Injection )
Dependency Injection
- Setter metoduyla
- Constructor metoduyla
Şimdi bunları içeren bir örnek yapalım.
Main.java
package test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main { public static void main(String[] args) { ApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml"); Personel p1=(Personel) context.getBean("pers1"); p1.yazdir(); } }
Personel.java
package test; public class Personel { private String ad; private int yas; private Araba araba; public Personel() { } public Personel(String ad, int yas) { this.ad = ad; this.yas = yas; } public String getAd() { return ad; } public void setAd(String ad) { this.ad = ad; } public int getYas() { return yas; } public void setYas(int yas) { this.yas = yas; } public void yazdir() { System.out.println("PERSONEL\n" + "ad\t:\t" + ad + "\nyas\t:\t"+yas +"\n\nAraba\n" +"marka\t:\t"+araba.getMarka() +"\nseri\t:\t"+araba.getSeri()+"\n"); } public Araba getAraba() { return araba; } public void setAraba(Araba araba) { this.araba = araba; } }
Araba.java
package test; public class Araba { private String marka; private String seri; public Araba() { } public Araba(String marka, String seri) { this.marka = marka; this.seri = seri; } public String getMarka() { return marka; } public void setMarka(String marka) { this.marka = marka; } public String getSeri() { return seri; } public void setSeri(String seri) { this.seri = seri; } }
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="pers1" class="test.Personel"> <property name="ad" value="enes"/> <property name="yas" value="25" /> <property name="araba" ref="araba1"/> </bean> <bean id="araba1" class="test.Araba"> <property name="marka" value="vw"/> <property name="seri" value="golf"/> </bean> </beans>
Yukarıdaki örnek setter metodu yardımıyla depedency injectiona örnekti. Eğer bunu constructor yardımıyla yapmak isteseydik aşağıdaki şekilde düzenlememiz yeterli olacaktır.
Personel sınıfına Araba nesnesi için bir constructor eklenecek.
applicationContext.xml sınıfında property yerine constructor tagı kullanılacak.
<bean id="pers1" class="test.Personel"> <property name="ad" value="enes"/> <property name="yas" value="25" /> <constructor-arg ref="araba1"/> </bean> |
Bu da constructor kullanarak dependency injection şekliydi.
Yorumlar
Yorum Gönder