Spring Dersleri – Autowiring Nedir? Kullanımı
Spring Dersleri‘ne devam ediyoruz.
Spring’in özelliklerini incelemeye devam ediyoruz. Önceki dersimizde işlediğimiz Dependency Injection konusunda bağımlılıkları enjekte ederken Spring xml dosyasında bean bağımlılıklarında kullanılan <constructor-arg> , <property> attributelerini kullanarak gerçekleştiriyorduk. Bu işlem yazılımız arttıkça tekrar tekrar yaparak Spring xml dosyamız büyümekte ve yönetmesi zorlaşmaya başlayacaktır.
Autowiring yöntemi ile xml bağımlılığı en aza inmektedir. Autowiring yapmanın çeşitleri bulunmaktadır. Bunları inceleyim.
Mod | Açıklama |
---|---|
no | Varsayılandır. Bağımlılıklar tek tek yazılır. |
byName | Bileşen özelliklerine otomatik olarak bağlanır. Aynı adda olan bean’e bağlanır. |
byType | Aynı tip ve türden olan bileşenler bağlanır. |
constructor | Constructorlar üzerinden bileşenler bağlanır. |
autodetect | Varsayılan olarak constructor üzerinden bağlanır. Eğer constructor yoksa byType olarak bağlanır. |
Bir senaryo üzerinden yukarıdaki modları kullanarak Autowiring ile beanları birbirine bağlayalım. Bir üye sınıfımız ve ona bağlı adres sınıfımız olsun.
public class Uye { private String ad; private String soyad; private String kullaniciAdi; public String getAd() { return ad; } public void setAd(String ad) { this.ad = ad; } public String getSoyad() { return soyad; } public void setSoyad(String soyad) { this.soyad = soyad; } public String getKullaniciAdi() { return kullaniciAdi; } public void setKullaniciAdi(String kullaniciAdi) { this.kullaniciAdi = kullaniciAdi; } }
Uye sınıfımızı oluşturduk ve şimdi Adres sınıfımızı oluşturalım.
public class Adres { private String sokak; private String mahalle; private String cadde; private Uye uye; public Uye getUye() { return uye; } public void setUye(Uye uye) { this.uye = uye; } public String getSokak() { return sokak; } public void setSokak(String sokak) { this.sokak = sokak; } public String getMahalle() { return mahalle; } public void setMahalle(String mahalle) { this.mahalle = mahalle; } public String getCadde() { return cadde; } public void setCadde(String cadde) { this.cadde = cadde; } }
Programı çalıştıracak sınıfımızı yazalım.
public class App { public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml"); Bolum bolum= (Adres) context.getBean("adres"); System.out.println("Adres :"+adres.getMahalle()+" Uye Adı:"+uye.getUye().getAd()); } }
Bu programımızda Adreste bulunan üyeyi görüntülemektedir. Spring xml konfigürasyonunu inceleyelim asıl konumuza gelelim. Autowiring yaparak beanlerimizi birleştirelim.
Kullanımı
<beans> <bean id="adres" class="com.burakkutbay.Adres" autowire="byType"> </bean> <bean id="uye" class="com.burakkutbay.Uye"> </bean> </beans>
Yukarıdaki işaretli yerde autowire kısmına ilgili modları eklediğimiz takdirde ilgili değerleri tip bazında ya da değer bazında beanlari bağlamış olmaktayız.
Önceki Ders: Dependency Injection (DI) | Spring Dersleri | Sonraki Ders: Autowired Anotasyonu Kullanımı |
güzel bir paylaşım olmuş emeğinize sağlık.
Bolum bolum= (Adres) context.getBean(“adres”); // hatalı gözden kaçmış olabilir
Adres adres= (Adres) context.getBean(“adres”);
Spring Boot’a ortasından girdiğim için anlamadığım çok konu olmuştu. Biz yazmasak da servis içerisinde @autowired tanımlandığı için kafamda deli sorular dolanıp duruyordu.
Paylaşımlarınız için teşekkürler.