Spring Bean Scope Nedir?

Bir bean’in context’i, kullandığımız bağlamlarda o bean’in yaşam döngüsünü ve oluşumunu tanımlar. Spring framework çatısında 6 adet bean scope bulunmaktadır:

  • singleton
  • prototype

Yalnızca web uyumlu uygulamalar ile kullanılabilen scope’lar ise:

  • request
  • session
  • application
  • websocket

Spring Bean Scope Nedir?

Spring Framework içinde “scope” bir nesnenin yaşam döngüsünü ve ne kadar süreyle erişilebilir olduğunu tanımlayan bir kavramdır. Spring, çeşitli nesne scope’ları sağlar ve bu scope’lar nesnelerin oluşturulma, kullanılma ve yok edilme şeklini belirler.

Bu scope’lar, Spring uygulamalarında nesnelerin nasıl yönetileceğini belirlemek için kullanılır. Scope belirleme, nesnelerin doğru zamanda oluşturulması, paylaşılması ve yok edilmesi açısından önemlidir ve uygulamanın performansı ve davranışı üzerinde etkili olabilir.

Spring Framework’de en yaygın olarak kullanılan scope’lar şunlardır:

1. Singleton Scope

Bir bean default olarak singleton scope’a sahiptir. Bean singleton scope ile tanımlandığı zaman mevcut application context‘imiz içerisinde o bean’den yalnızca ve yalnızca tek bir adet initialize edileceğini garanti ederiz. Bu bean ile yapılacak olan tüm request’ler cache’lenmiş olan aynı nesne üzerinden yapılır. Bean nesnemiz üzerinde yapılan bir değişiklik bean’i kullanan tüm yerlerde etkilecektir. Scope notasyonun singleton için iki farklı kullanımını aşağıda görebilirsiniz.

@Bean
@Scope("singleton")
//@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
public MyBean myBean() {
    return new MyBean();
}

2. Prototype Scope

Prototype ile belirlenmiş bir bean, container içerisinde çağırıldığı her request’te yeniden oluşturulacaktır. Scope notasyonun iki farklı kullanımını aşağıda görebilirsiniz.

@Bean
@Scope("prototype")
//@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public MyBean myBean() {
    return new MyBean();
}

3. Request Scopes

Request scope değeri her bir http request’i bir adet bean oluştururur. Örnek bir bean’i şu şekilde oluşturabiliriz:

@Bean
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
//@RequestScope
public MyBean myBean() {
    return new MyBean();
}

Web application context’inin örneklenmesi esnasında aktif bir request olmadığından dolayı proxyMode tanımının yapılması gereklidir. Spring framework, dependency olarak inject edilecek bir proxy oluşturur ve bir request’e ihtiyaç duyulduğunda ilgili scope’a sahip olan bean’i örnekler. Ayrıca, yukarıdaki @Scope tanımı için bir kısayol görevi gören @RequestScope notasyonunu da kullanabiliriz.

İlgini çekebilir:  Spring ile Spring Boot Arasındaki Farklar Nelerdir?

4. Session Scope

Session scope değeri her bir http session’ı için bir adet bean oluşturur. Örnek bir bean’i şu şekilde oluşturabiliriz:

@Bean
@Scope(value = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS)
//@SessionScope
public MyBean myBean() {
    return new MyBean();
}

5. Application Scope

Bir application scope, ServletContext’in yaşam döngüsü için bean örneğini oluşturur. Bu singleton scope’a benzer ancak aralarında farklılıklar mevcuttur. Bir bean application scope değerine sahipken bu bean çoklu servlet tabanlı uygulamalar ile de paylaşılabilirken, singleton scope değerine sahip bir bean yalnızca mevcut application context’i içerisinde tanımlıdır.

@Bean
@Scope(value = WebApplicationContext.SCOPE_APPLICATION, proxyMode = ScopedProxyMode.TARGET_CLASS)
//@ApplicationScope
public MyBean myBean() {
return new MyBean();
}

6.WebSocket Scope

WebSocket scope’a sahip bean’ler tipik olarak singleton scope yapısındadır ve herhangi bir WebSocket oturumundan daha uzun yaşar. Bu nedenle, WebSocket scope’una sahip bean’ler için bir proxyMode tanımı gerekir. Singleton davranış sergilediğini, ancak yalnızca bir WebSocket sesion’ı ile sınırlı olduğunu da söyleyebiliriz.

@Bean
Scope(scopeName = "websocket", proxyMode = ScopedProxyMode.TARGET_CLASS)
public MyBean myBean() {
return new MyBean();
}

More Reading

Post navigation

Comments are closed.