Spring – Ders 11 Autowiring – 02 @Autowired
Merhaba Arkadaslar,
Bir onceki yazimda Spring ‘ de autowiring islemini xml dosyasi uzerinde yapmistik burada @Autowired notasyonu yardimi ile ornek uygulamalar gerceklestirecegiz.
Autowired notasyonunu hem degiskenler, hem setter metotlari hem de constructor icin kullanabiliriz. Sirasiyla inceleyelim.
Degisken uzerinden @Autowired
Bir onceki yazida kullandigim siniflar uzerinde devam edecegim.Employee ve Address sinifi vardi , Employee sinifi Address sinifi turunden bir instance variable iceriyordu. Burada Employee sinifinda bulunan bu degisken uzerinden @Autowired islemini gerceklestirecegiz.
Employee.java
Bu sinifta Address turundeki degisken icin @Autowired notasyonunu kullaniyoruz
@Autowired private Address address;
tutorial_11_autowired.context.xml
Spring de varsayilan olarak Autowiring kapali durumdadir.Aktif hale getirmek icin bir kac yontem vardir.Bu xml dosyamizda su eklemeleri yaparak Spring’e Autowired islemini gerceklestirmesini belirtiyoruz.Ilgili yerlere su kisimlari ekledik.
xmlns:context="http://www.springframework.org/schema/context" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd <context:annotation-config />
Dosyamizin icerigi su sekilde olacaktir;
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:annotation-config /> <bean id="employeeid" class="erguder.levent._11.autowiring.annotation.context.Employee"> <property name="name" value="Levent Erguder" /> <property name="age" value="23" /> </bean> <bean id="address" class="erguder.levent._11.autowiring.annotation.context.Address"> <property name="city" value="Istanbul" /> <property name="district" value="Umraniye" /> </bean> </beans>
Test sinifimizi calistirdigimizda su ciktiyi aliriz ;
Employee [name=Levent Erguder, age=23, address=Address [city=Istanbul, district=Umraniye]]
@Autowired notasyonunda opsiyonel olarak required=false yapisi eklenerek kullanilabilir. Bu bir nevi hata exception kontroludur.
Ornegin yeni bir sinif olusturup(Required.java), Employee sinifinda bir instance variable daha ekleyip getter/ setter metodunu da olusturalim. Olusturdugumuz Required sinifinin bir <bean> tanimlamasi olmadigi icin NoSuchBeanDefinitionException hatasi aliriz. @Autowired(required=false) olarak tanimladigimizda bu hataya dusmeyecektir.
@Autowired(required=false) private Required required;
Setter Uzerinden @Autowired
Ikinci bir kullanim olarak Employee sinifindaki Address turundeki instance variable ‘a ait setter metodu uzerinden @Autowired islemini gerceklestirebiliriz.
Burada ayrica <context:annotation-config /> kullanarak Spring’e Autowired islemini aktif hale getirmesini soyleyelim.
tutorial_11_autowired.pp.xml
Bu xml dosyamizda <context:annotation-config /> ve diger ekledigimiz kisimlari cikartip sadece su tanimlamayi ekledim.
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
<?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-3.0.xsd"> <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/> // diger bean tanimlamalari </beans>
Ayrica @Autowired notasyonunu setter metodu Address turundeki degiskenle kullanabildigimiz gibi setter metodu ile de kullanabiliriz.
@Autowired public void setAddress(Address address) { this.address = address; }
Test sinifimizi calistirdigimizda yine sorunsuz calisacaktir ve ayni sonucu alacagiz.
Employee [name=Levent Erguder, age=23, address=Address [city=Istanbul, district=Umraniye]]
Constructor(yapilandirici) Uzerinden @Autowired
Bir diger yontem olarak Constructor uzerinden de @Autowired islemini gerceklestirebiliriz. Ayni yapiyi xml ile de kurmustuk.
Employee sinifimizda Address turunden bir degisken alan constructor (yapilandirici) olacaktir. address degiskeninin getter/ setter metodun artik ihtiyacimiz yok bunlari kaldirdim.
@Autowired public Employee( Address address) { this.address = address; }
Ornegimizi calistirdigimizda yine ayni sonucu aliriz.
Constructor(yapilandiri) Uzerinden @Autowired yaptigimizda hata kontrolu icin required=false ifadesi ise yaramayacaktir.
Son Apache Maven yazimda uzerinde Spring yazilarim icin kullandigim Java projesini Maven projesine donusturmustum.
http://www.injavawetrust.com/apache-maven-ders-7-java-project-to-maven/
Kaynak Kodlar:SpringProject_v11
Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
injavawetrust
Leave a Reply