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
Leave a Reply