Belli Olan Belirsizlik: Spring Boot Bean’leri

fatih arslan
HAVELSAN
Published in
3 min readDec 30, 2023
Spring Boot Bean Scope’ları

Merhabalar,

Bu yazımda Spring Boot’a yeni başlamış veya başlayacak olanlar için olmazsa olmaz kavramımız “Bean” leri dilim döndüğünce anlatmaya çalışacağım.

Bean, Spring Boot için anahtar bir kavramdır. Dolayısıyla bu kavramı anlamak Spring framework’ünü anlamak ve efektif bir şekilde kullanmak için çok önemlidir. İnternetten araştırmalarım ve okuduğum Türkçe kaynaklarda maalesef “Spring Bean nedir?” sorusuna net cevaplar bulamadım. Aslına bakarsanız net cevaplardan kastım, Spring Boot için bu kadar önemli olan bir kavramın ya çok basite indirgenerek açıklandığını ya da çok belirsiz bırakıldığını gördüm.

Gelelim Sorumuza: “Bean Nedir?”

Bean, Spring Boot’un resmi dokümanında şu şekilde açıklanmaktadır:

Spring’de uygulamanızın omurgasını oluşturan ve IoC konteyner tarafından yönetilen nesneler “Bean” olarak adlandırılır. Bean, Spring IoC konteyneri tarafından başlatılan, bir araya getirilen ve başka şekilde yönetilen bir nesnedir.

Bu tanım kısa ve çok net bir tanımdır aslında. Ama konuyu daha iyi kavrayabilmek için IoC konteynerinin detaylandırılmasında fayda olacaktır. Bu kavramın ne olduğuna ve nasıl faydalar sağladığına gelin yakından bakalım.

Inversion of Control: Kısacası “IoC”

Aslına bakarsak IoC bir yaklaşımdır. Bu yaklaşımı kısaca açıklamak gerekirse; bir yazılım bileşeninin dış bir kaynak veya kütüphane tarafından yönetilmesidir.

Inversion of Control, Türkçesi “Kontrolün Tersine Çevrilmesi”. Gelin bu kavramı biraz daha detaylandıralım. Geleneksel yazılım yaklaşımında, yazılıma ait bir modülün veya bileşenin kendisi tarafından yönetilmesi uygun görülür. IoC ise bu yaklaşımın tam tersini savunur.

Şimdi de “IoC Container” kavramına yakından bakalım. IoC Container, IoC prensiplerini uygulayan ve bir yazılım uygulamasındaki nesnelerin yaşam döngüsünü (Spring Boot’ta bu döngüler scope olarak isimlendirilir) yöneten bir yapıdır. Yönetmekten kastımızı aşağıdaki gibi listeleyebiliriz:

  • Bir nesnenin yaratılması
  • Bağımlılıklarının çözümlenmesi
  • Nesnenin kullanıldığı zamanın kontrolü

Peki bu yönetimi IoC Container’ın üstlenmesi yazılım geliştiricisine nasıl bir artı sağlar. Bu sayede geliştirici, nesneler arasındaki bağımlılıkları yönetmek ve uygulama akışını kontrol etmek için daha fazla esneklik ve geniş bir kontrol sağlayabilir.

IoC Containerları, genellikle büyük ve karmaşık uygulamalarda kullanılır ve kodun daha modüler, test edilebilir ve bakımı daha kolay hale getirilmesine yardımcı olur.

Java Spring’te Bean Scopeları: Nesne Yaşam Döngüsü Rehberi

Spring framework kapsamında 6 tip bean kapsamı (scope) vardır. Bunlar şu şekildedir:

  • Singleton
  • Prototype
  • Request
  • Session
  • Application (Global Session)

Mini Notlar:

- Request, Session ve Application kapsamları sadece web tabanlı uygulamalar tarafından desteklenmektedir.

- Bir bean için kapsam belirtmek için Scope anotasyonu kullanılır.

Singleton:

  • Varsayılan scope’dur.
  • Uygulama genelinde yalnızca bir tek örneğin oluşturulmasını sağlar.
  • Her istek için aynı nesneyi kullanır, yani aynı nesne paylaşılır.
Singleton Bean Örneği

Prototype:

  • Her bir talep için yeni bir örnek oluşturur.
  • Her talep için ayrı bir nesne örneği oluşturulur, bu nedenle farklı talepler farklı nesneleri paylaşmaz.
Prototype Bean Örneği

Request:

  • Her HTTP talebi için bir örnek oluşturur.
  • Yalnızca web tabanlı uygulamalarda kullanılır ve her HTTP talebi için ayrı bir nesne oluşturur.
Request Bean Örneği

Session:

  • Her kullanıcı oturumu için bir örnek oluşturur.
  • Web tabanlı uygulamalarda, her kullanıcı için ayrı bir nesne örneği oluşturur.
Session Bean Örneği

Application (Global Session):

  • Uygulama genelinde yalnızca bir örnek oluşturur.
  • Web tabanlı uygulamalarda, uygulama başına yalnızca bir örnek oluşturulmasını sağlar.
Application Bean Örneği

Vaktinizi ayırıp yazımı okuduğunuz için teşekkür ederim. Bir sonraki yazımda görüşmek dileğiyle.

--

--