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

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *