Spring Scopes

Uygulamamız içerisinde yaşam döngüleri spring IoC Container tarafından yönetilen nesnelere Spring Beans denir. Spring Bean’ler tanımlanırken ;

  • XML konfigurasyon dosyası,
  • Annotation,
  • Java konfigurasyon sınıfı

kullanılabilir.

Bir Spring Bean’in ne zaman yaratılacağını scope vererek söyleriz. Spring Framework’te bean tanımlarken kullanabildiğimiz 5 farklı scope vardır.

  • singleton (default) : Sınıfa istek geldiğinde tek bir instance yaratılır ve bütün istemcilere aynı instance paylaştırılır. Eğer bir bean tanımlanırken hangi scope kullanıldığı söylenmezse container sınıfın tek instance’ını yaratır.

singleton

singleton bean tanımları için konfigürasyon dosyalarında ekstra bir tanım yapmak gerekmez. XML dosyası şöyle olabilir.

<bean id="evAdresi" class="com.javauzmani.context.Adres" scope="singleton">
	...
</bean>

 

ya da şöyle

<bean id="evAdresi" class="com.javauzmani.context.Adres">
	...
</bean>

 

Bean tanımı annotation ile yapılıyorsa herhangi bir stereotype dışında ekstra bir tanıma gerek kalmaz.

 

  • prototype : Sınıfa her istek geldiğinde ayrı bir instance yaratılır.

prototype

Bir bean’in prototype scope’ta olduğunu söylemek için XML dosyasında ;

<bean id="evAdresi" class="com.javauzmani.context.Adres" scope="prototype">
	...
</bean>

 

Sınıfta annotation ile yapılıyorsa ;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
 
@Component
@Scope("prototype")
public class Adres {
 
}

 

şeklinde yapılır.

Annotation konfigurasyonu kullanıldığında bunu Spring’e söylemek gerekir. XML dosyasında annotation’ların hangi paket altındaki sınıflarda aranacağını

<context:component-scan base-package="..." />

özelliğiyle söyleriz.

  • request : Gelen her bir HTTP isteği için bir bean instance’ı yaratılır. Benzer şekilde ;
<bean id="loginAction" class="com.javauzmani.LoginAction" scope="request"/>

şeklinde tanımlanır.

  • session : Aynı kullanıcının yaptığı bütün HTTP istekleri için tek bir instance yaratılır. Birden fazla kullanıcı için birden fazla bean instance’ı yaratılır.
<bean id="loginAction" class="com.javauzmani.LoginAction" scope="session"/>

 

  • globalSession : Session scope’a benzer. Portlet tabanlı web uygulamalarında kullanılır.
<bean id="loginAction" class="com.javauzmani.LoginAction" scope="globalSession"/>

 

request, session ve globalSession scope’ları sadece web tabanlı ApplicationContext implementasyonu ile kullanılabilir.

Spring Framework ile kendi custom scope‘unuzu da yaratabilir hatta var olan scope’ları revize edebilirsiniz. Ancak best practice olarak varsayılan scope’ların güncellenmesi tavsiye edilmez.

 

 



340 defa okundu



Yorum Yazmak İstiyorum

E-posta hesabınız yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>