DEV Community

Cover image for Singleton Tasarım Deseni ve Bean Scope
Eyüp Akdeniz
Eyüp Akdeniz

Posted on

Singleton Tasarım Deseni ve Bean Scope

Singleton

Uygulamada birçok nesne tarafından yeniden kullanılması amaçlanan tek bir instance'a ihtiyaç duyulan durumlarda kullanılır. Spring'de, bu nesneleri Spring'in singleton bean'leri kullanarak veya Singleton tasarım desenini kendimiz uygulayarak oluşturabiliriz. Singleton, nesnelerin tekrar tekrar oluşturulmasının maliyetini önlemek veya bir nesneyi paylaşmanın gerektiği durumlar için idealdir.

Singleton pattern implementasyonu, bir nesnenin gerçekten ihtiyaç duyulana kadar oluşturulmasını geciktirmek için genellikle tembel (lazy) başlatmayı kullanır. Yani bir nesnenin gerçekten ihtiyaç duyulana kadar oluşturulmasını erteleyerek, kaynak kullanımını ve performansı optimize edebilir.

Spring çerçevesinde bir "bean," Spring IoC konteyneri içinde oluşturulan, yönetilen ve sonlandırılan bir nesnedir.

Bean Scope

Spring bean'leri ile bir nesneyi, Inversion of Control(IoC) kullanarak, metadata aracılığıyla Spring container'ı enjekte edebiliriz. Bu, bir nesnenin bağımlılıklarını oluşturmadan tanımlayabilmesini ve bu işi IoC container'ına devredebilmesini sağlar.

Spring çerçevesinin en son sürümü altı tür kapsam tanımlar:

  1. Singleton
  2. Prototype
  3. Request
  4. Session
  5. Application
  6. WebSocket

Bir bean'in scope'u, yaşam döngüsünü ve görünürlüğünü tanımlar. Ayrıca bir bean'in gerçek instancelarının nasıl oluşturulacağını belirler.

Singleton Scope

Bir bean'i singleton scope ile tanımladığımızda, container o bean'in yalnızca bir instance oluşturur; bu bean adı için gelen tüm istekler aynı nesneyi döndürecektir ve bu nesne önbelleğe alınır. Nesnenin herhangi bir değişikliği, bean'e yapılan tüm isteklerde yansıtılır. Eğer başka bir kapsam belirtilmemişse, varsayılan olarak Singleton değerindedir.

Prototype Scope

Prototype scope'a sahip bir bean, her seferinde container istendiğinde farklı bir instance döndürecektir. Bu, bean tanımında @Scope açıklamasına prototype değerini ayarlayarak tanımlanır.

Request Scope

Bir bean, her HTTP isteği için ayrı bir instance oluşturur. Yani bir istek aldığında yanıt verilene kadar bir instance kullanılır ve yeni bir istek geldiğinde farklı bir instance bean tarafından oluşturulur. Request scope, yalnızca web uygulamaları için geçerlidir.

Session Scope

Bir bean, her HTTP oturumu için ayrı bir instance oluşturur. Bu, aynı kullanıcının oturumu boyunca aynı bean instance'ı paylaşmanızı sağlar. Session kapsamı da yalnızca web uygulamaları için geçerlidir.

Application Scope

Application kapsamı, yine yalnızca web uygulamaları için geçerlidir. Bir bean, bir ServletContext'in yaşam döngüsü boyunca aynı örneği oluşturur. Bu, tüm uygulama boyunca aynı bean instance'ı paylaşmanızı sağlar. ServletContext, bir Java web uygulamasının çalıştığı sunucu ortamında, tüm web bileşenlerinin paylaştığı bir nesnedir.

WebSocket Scope

WebSocket kapsamı da web uygulamaları ile ilişkilidir ve belirli bir WebSocket oturumu için bir bean instance oluşturur. Bu, WebSocket oturumu süresince aynı bean örneğini paylaşmanızı sağlar.

References

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more