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

Print Friendly, PDF & Email

Leave a Reply

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