Spring – Ders 13 Autowiring – 04 @Inject – 01

Merhaba Arkadaslar,

Spring , 3.0 versiyonundan itibaren , JSR 330: Dependency Injection for Java spesifikasyonunda tanimlanan @Inject notasyonunu desteklemektedir. Bu notasyon Spring’te kullandigimiz @Autowired notasyonuna denk dusmektedir. Bu nedenle @Autowired notasyonu yerine @Inject notasyonu da kullanabiliriz.

@Autowired notasyonunu kullanarak metotlar/yapilandiricilar uzerinden autowiring yapabildigimiz gibi @Inject notasyonu ile de yapabiliriz. @Inject notasyonunda required ozelligi yoktur yani , autowiring isleminin sorunsuzca gerceklesmesi gerekmektedir. ( required ozelligine onceki yazilarda deginmistim )
Spring’de @Qualifier notasyonunu kullanmistik, buna karsilik @Named notasyonunu kullanabiliriz.

Ornegimize gecmeden once @Inject notasyonu icin yeni jarlar gerekmektedir , daha once projeyi maven projesine cevirmistik. Simdi gerekli jarin dependency/bagimlilik tanimlamasini pom.xml dosyamiza  <dependencies> etiketinden sonra ekleyelim.

<dependency>
	<groupId>javax.inject</groupId>
	<artifactId>javax.inject</artifactId>
	<version>1</version>
</dependency>

Gerekli jarlarimiz indigine gore ornegimizi uygulamaya baslayalim.

Address.java

package erguder.levent._13.autowiring.injectJSR330;

import javax.inject.Named;

@Named
public class Address {
	public void getAddress() {
		System.out.println("Istanbul");
	}
}

Address sinifimiz basinda @Named notasyonunu kullandik. @Named notasyonu @Qualifier notasyonuna denk gelmekteydi.

Employee.java

package erguder.levent._13.autowiring.injectJSR330;

import javax.inject.Inject;
import javax.inject.Named;

@Named
public class Employee {
	@Inject
	private Address address;

	public void getInfo() {
		System.out.println("Levent Erguder");
		address.getAddress();
	}

}

Address turundeki degisken uzerinden @Inject notasyonunu uygulayarak autowiring islemini gerceklestirebiliriz.

tutorial_13_inject.xml
xml konfigurasyon dosyamiza bazi eklemelerde bulunmamiz gerekmektedir.

xsi:schemaLocation="http://www.springframework.org/schema/beans      
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd

Daha once <context> etiketini kullanmistik, <context:annotation-config /> Springde varsayilan olarak kapali olan autowiring islemini aktif hale getirme yollarindan biriydi.

<context:component-scan base-package="erguder.levent._13.autowiring.injectJSR330" />

<context:component-scan> etiketiyle auto-scanning /otomatik tarama ozelligini aktif hale getiriyoruz. base-package ile auto-scanning isleminin yapilacagi paketi belirtiyoruz.

xml dosyamizin son hali ;

<?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-3.1.xsd">

	<context:component-scan base-package="erguder.levent._13.autowiring.injectJSR330" />
</beans>


TestAutoWiringInject.java

package erguder.levent._13.autowiring.injectJSR330;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestAutoWiringInject {
	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("tutorial_13_inject.xml");

		Employee emp1 = (Employee) context.getBean("employee");
		emp1.getInfo();

	}
}

Burada getBean metoduna gonderdigimiz arguman employee olmalidir. (Employee.java)

Ornegimizi calistirdigimizda ;

Levent Erguder
Istanbul

Kaynak kodlar :SpringProject_v13

Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
injavawetrust

Print Friendly, PDF & Email

Leave a Reply to muhammed Cancel reply

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