Spring – Ders 15 Autowiring – 06 @Component
Merhaba Arkadaslar,
Bu yazimizda daha once kullandigimiz <content:component-scan> etiketini ve buna ek olarak @Component notasyonunu kullanacagiz.
Hatirlayacagimiz gibi ; <context:annotation-config /> kullanarak Spring’e Autowired islemini aktif hale getirmesini soyluyorduk.
http://www.injavawetrust.com/spring-ders-11-autowiring-02-autowired/
Bu yapidan daha kolay olarak ;
<context:component-scan> etiketiyle auto-scanning /otomatik tarama ozelligini aktif hale getiriyoruz. base-package ile auto-scanning isleminin yapilacagi paketi belirtiyoruz.
http://www.injavawetrust.com/spring-ders-13-autowiring-04-inject/
Boylece <contex:component-scan> etiketi yardimiyla Spring ilgili beanleri bizim icin otomatik olarak bulacak ve baglayacaktir.
Component Notasyonu
@Component notasyonu daha once inceledigimiz @Named notasyonu ile temel olarak ayni seyi yapmaktadir. Spring’ in otomatik arama islemlerinde bu notasyon ile isaretlenen sinifi dikkate almasini ve gerekli baglama islemlerini yapmasini saglar.
Spring de @Component notasyonu gibi @Controller , @Repository , @Service notasyonlari vardir. Bunlara stereotype annotation denilmektedir.
Bu stereotype annotation Spring de hemen hemen ayni anlama gelmektedir. @Service , @Repository ve @Controller notasyonlari , @Component notasyonunun ozellestirilmis halidir.
Ihtiyaca yonelik olarak tercih yapilabilir , ornegin ;
@Controller notasyonunu Spring MVC siniflari
@Service notasyonu web service siniflarinda
@Repository database/ dao /persistence siniflarinda tercih edilir.
Address.java
package erguder.levent._15.autowiring.component; import org.springframework.stereotype.Component; @Component public class Address { public void getAddress() { System.out.println("Istanbul"); } }
Employee.java
package erguder.levent._15.autowiring.component; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class Employee { @Autowired private Address address; public void getInfo() { System.out.println("Levent Erguder"); address.getAddress(); } }
tutorial_15_component.xml
<?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._15.autowiring.component" /> </beans>
xml dosyamizda <context:component-scan> etiketini kullanarak , beanlerin birbirine otomatik olarak baglanmasini sagladik.
TestAutoWiringComponent.java
package erguder.levent._15.autowiring.component; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestAutoWiringComponent { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("tutorial_15_component.xml"); Employee emp1 = (Employee) context.getBean("employee"); emp1.getInfo(); } }
Daha once belirtigim gibi beani birbirine baglamak icin getBean metoduna arguman olarak gonderdigimiz deger ; sinifimizin ismiyle ayni olmalidir. (kucuk buyuk harf onemlidir, camelCase yapisina uygun olarak tanimlanmalidir. “employee” yerine “EMPLOYEE” gonderirsek hata aliriz)
Ya da bir isim vererek su sekilde kullanabiliriz ;
@Component("employee_id") public class Employee {...}
Employee emp1 = (Employee) context.getBean("employee_id");
Test sinifimizi calistirdigimizda ;
Levent Erguder
Istanbul
Kaynak kodlar: SpringProject_v15
Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
injavawetrust
Leave a Reply