Spring – 07 – Bean Name Aliasing & Bean Scopes

Merhaba Arkadaslar
Bu bolumde  Bean Name Aliasing & Bean Scopes konularini inceleyecegiz.

Bean Name Aliasing

<bean> taginda eger id attribute varsa isim/name icin bu attribute kullanilir eger id attribute belirtilmemisse Spring bu durumda name attribute tanimina bakacaktir eger name attribute tanimi da yoksa bu durumda Spring class attribute e bakacaktir.
Bu nedenle id veya name attribute olmadan multiple bean tanimi exception firlatacaktir. ( org.springframework.beans.factory.NoSuchBeanDefinitionException)

Bir bean birden fazla isme sahip olabilir. Bunun icin name attribute’te bosluk , virgul ya da noktali virgul kullanabiliriz. Bununla birlikte <alias> tagini kullanarak takma isim(alias) kullanabiliriz.

Person.java

package _07.bean.aliasing.model;

public class Person {

}

07.bean.aliasing.xml

...
	
 <bean id="name1" name="name2 name3,name4;name5" class="_07.bean.aliasing.model.Person" />

 <alias name="name1" alias="name6" />
	
...

BeanNameAliasingTest.java

XML konfigurasyon dosyamizda bean icin id ve name attribute’leri kullandik. DIkkat edecek olursak bosluk virgul ve noktali virgul ile isimleri ayirdik. getBean metodunu kullanarak bean objesini elde edelim. == kontrolu yaptigimizda hepsi icin sonuc true donecektir.

package _07.bean.aliasing.test;

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

import _07.bean.aliasing.model.Person;

public class BeanNameAliasingTest {

	public static void main(String[] args) {

		ApplicationContext ctx = new ClassPathXmlApplicationContext("07.bean.aliasing.xml");

		Person person1 = ctx.getBean("name1", Person.class);
		Person person2 = ctx.getBean("name2", Person.class);
		Person person3 = ctx.getBean("name3", Person.class);
		Person person4 = ctx.getBean("name4", Person.class);
		Person person5 = ctx.getBean("name5", Person.class);
		Person person6 = ctx.getBean("name6", Person.class);

		System.out.println((person1 == person2));
		System.out.println((person2 == person3));
		System.out.println((person3 == person4));
		System.out.println((person4 == person5));
		System.out.println((person5 == person6));

		((ClassPathXmlApplicationContext) ctx).close();
	}
}

Ornegimizi calistirdigimizda ;

true
true
true
true
true

Bean Instantiation Mode

Varsayilan olarak tum bean’ler singleton ‘tir. Yani her bean icin Spring sadece bir tane instance/obje olusturur. Bu nedenle ApplicationContext.getBean() ayni instance/objeyi doner.

  • Singleton
  • Prototype
  • Request
  • Session
  • Global Session
  • Thread

Singleton
Bean’ler icin varsayilan scope Singleton’dir. Spring IoC container tarafindan her bean icin sadece bir instance/obje olusturulur.

Prototype
Spring IoC , uygulama tarafindan her istendigi durumda ilgili bean’den bir obje olusturacaktir.

Request
Web uygulamalarinda kullanilir. Spring MVC uygulamalarinda , her HTTP request icin request scope bean objesi/intance olusur ve HTTP request tamamlandiginda bean objesi/instance yok edilir (destroy)

Session
Web uygulamalarinda kullanilir. Spring MVC uygulamalarinda , her HTTP session icin session scope bean objesi/intance olusur ve HTTP session tamamlandiginda bean objesi/instance yok edilir (destroy)

Global Session
Tum HTTP sessionlari icin bir tane bean instance/obje olusturulur.

Thread
Yeni bir thread tarafindan istek geldiginde, Spring yeni bir bean instance/objesi olusturur. Istek ayni thread te geldigi surece ayni bean instance/objesi dondurulur.

08.bean.scope.xml

XML dosyamizda name1 icin singleton scope (varsayilan/default scope) , name2 icin prototype scope tanimini yapalim.

 ....
 <bean id="name1" class="_08.bean.scope.model.Person" />
 <bean id="name2" class="_08.bean.scope.model.Person" scope="prototype"/>
...

BeanNameScopeTest.java
name1 singleton scope olacak sekilde tanimlidir. getBean metodu kullanildiginda her defasinda ayni instance/obje dondurulecektir.
name2 prototype scope tanimlandi. getBean metodu kullanildiginda her defasinda farkli instance/obje dondurulecektir.

package _08.bean.scope.test;

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

import _08.bean.scope.model.Person;

public class BeanNameScopeTest {

	public static void main(String[] args) {

		ApplicationContext ctx = new ClassPathXmlApplicationContext("08.bean.scope.xml");

		Person person1 = ctx.getBean("name1", Person.class);
		Person person11 = ctx.getBean("name1", Person.class);
		// name1 singleton scope olacak sekilde tanimlidir. getBean metodu
		// kullanildiginda her
		// defasinda ayni instance/obje dondurulecektir.

		Person person2 = ctx.getBean("name2", Person.class);
		Person person22 = ctx.getBean("name2", Person.class);
		// name2 prototype scope tanimlandi. getBean metodu kullanildiginda her
		// defasinda farkli instance/obje dondurulecektir.

		System.out.println("Singleton : " + (person1 == person11));
		System.out.println("Prototype : " + (person2 == person22));

		((ClassPathXmlApplicationContext) ctx).close();
	}
}

Ornegimizi calistirdigimizda ;

Singleton : true
Prototype : false

Github kaynak dosyalar/ source folder
leventerguder/injavawetrust-spring-tutorial

Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
OCP, Java SE 6 Programmer
OCE, Java EE 6 Web Component Developer

Print Friendly, PDF & Email

Leave a Reply

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