Spring Dersleri – Spring Framework Nedir ?

Merhaba arkadaşlar,
Mobilhanem.com adresimizden yayınladığımız  Spring Derslerinde ilk dersimizde Spring Nedir sorusuna cevap aramıştık. Spring projelerini kullanmanın yazılımcının hayatını nasıl kolaylaştırdığından, Springin neden tercih sebebi olabileceğinden bahsetmiştik. Bu dersimizde ise Spring projelerinden Spring Framework nedir, yazılımcının hayatını nasıl kolaylaştırıyor sorusuna cevap arayacağız.

Spring Framework Nedir ?

Spring framework, Java tabanlı enterprise uygulamalar için kapsamlı bir programlama ve konfigürasyon altyapı desteği sunar. Yazılımcı bu altyapı desteği sayesinde ilk derste de bahsettiğimiz gibi ciddi bir iş yükünden kurtulur, business logic dediğimiz, uygulamamızda verinin yorumlandığı ve iş kurallarının uygulandığı katmana odaklanma şansı bulur.

Peki Ne Sağlıyor ?

Spring Framework MVC mimarisini sunması, Aspect Oriented Programlama imkanı sağlaması, Restful web servisleri sağlaması, JDBC, JPA desteği gibi birçok özellik sağlamaktadır. Ancak Spring Framework dediğimizde şu özellikler aklımıza direk gelmelidir:

  • Model View Controller Architecture (MVC)
  • Dependency Injection (DI)
  • Inversion of Control (IoC)
  • Aspect Oriented Programming (AOP)

MVC Mimarisi

Model – View – Controller bir web uygulaması mimarisidir. Uygulamanın arayüz, veri, iş-işlem gibi sorumluluklar bakımından katmanlara bölünerek gerçekleştirilmesini sağlar. Bu sayede katmanlar biribirinden bağımsız olarak kullanılabilir ve güncellenebilir. Yönetimi kolay bir uygulama sunulmuş olur. MVC mimarisi Spring ile ortaya çıkmış bir mimari değildir. Hali hazırda olan ve web uygulamaları noktasında oldukça kabul görmüş bir mimari olmasından dolayı Spring Framework tarafından da sağlanmaktadır. Daha öncede söylediğimiz gibi odak noktamız web uygulamaları olduğu için MVC mimarisinin bilinmesi yararlı olacaktır. Mimariyi sağlanan katmanlar üzerinden ele alacak olursak:

  • Model: Uygulama verisinden sorumlu katmandır. Object oriented anlamda uygulamamız için gereken nesne tanımlarıdır diyebiliriz.
  • View: Model verisinin arayüz olarak kullanıcıya sunulmasından sorumlu katmandır.
  • Controller: Kullanıcı isteklerininin değerlendirilip, ilgili modelde gerekli güncellenme sürecinden sorumlu katmandır.

Spring Framework Nedir

Katmanların birbirleriyle etkileşimi noktasında, yukarıda paylaşılan MVC akış planı oldukça açıklayıcıdır. Akış planı üzerinden gidecek olursak;

  1. Kullanıcı View katmanında sağlanan arayüzü görür,
  2. Kullanıcı bu arayüz üzerinden Controller katmanını kullanır,
  3. Controller katmanı Model katmanında gerekli değişiklikleri yapar,
  4. Model katmanı View katmanını güncelleyerek değişiklik yapılmış verinin kullanıcıya tekrar sunulmasını sağlar,
  5. Kullanıcı View katmanında sağlanan arayüzde son durumu görür

DI ve IoC

Birçok kaynakta Dependency Injection ve Inversion of Control aynı şeymiş gibi anlatılır, ancak çok doğru değildir. Bu özelliklerin daha iyi anlaşılması için bir arada değerlendirilmesi daha iyi olacaktır.

Java prensiplerinden hatırlayacağımız üzere, bir sınıf diğer sınıflardan olabildiğince bağımsız olmalıdır. Bu sayede bir sınıfta değişikliğe gidileceği zaman yaşanabilecek kompleks senaryolardan kaçınılmış olur. Bu bağımlılığı ortadan kaldırmak daha doğrusu en aza indirmek için Dependency Injection uygulanır. Dependency Injection tam olarak anlamının karşılığı olan işi yapmaktadır: bağımlılık enjekte edilmesi. DI ile bağımlılıklar kod içerisinde belirtilmez runtimeda enjekte edilir.

Daha iyi anlamak adına bir senaryo üzerinden gidecek olursak; bir A sınıfımız olsun ve bu sınıfın bir işlem nedeniyle B sınıfına bağımlılığı olsun. A sınıfı içerisinde;

şeklinde nesne oluşturmak yerine, Spring XML konfigürasyonuyla veya anotasyonlar yardımıyla bu bağımlılığı belirtebiliriz. Bağımlılık belirttiğimiz koşullar çerçevesinde Spring tarafından enjekte edilir. Bu sayede A sınıfının B sınıfı hakkında bağımlılığı olduğu dışında bilmesi gereken birşey yoktur. Bu bağımlılığın konfigürasyonu A sınıfı dışından yapılacak, sınıfların birbirlerine bağımlılığı en aza indirilerek yapılacak bir değişiklikte minimum seviyede etkilenmeleri sağlanacaktır.

Inversion of control ise kontrolün tersine çevrilmesi anlamına gelmektedir. Yani kontrolün uygulamadan alınarak, frameworke ( bizim için Spring ) aktarılmasıdır. IoC sayesinde nesnelerin hayat döngüsü, yönetimi, bağımlılıkların yönetimi Springe bırakılmış olur. Evet dikkat ettiyseniz bağımlılıkların yönetimi dedik. Yani DI, IoC örneklerinden birisidir. Daha net bir cümle ile özetleyecek olursak, uygulamamızda Dependecy Injection ile Inversion of Control sağlamış oluruz.

AOP

Aspect oriented programming konusunda “cross cutting concerns” terimiyle ifade edilen bir konsept bulunmaktadır. Türkçede tam bir karşılığı yok ancak ortak ilgi alanı kaygıları gibi düşünebiliriz. Bu ortak ilgi alanı kaygıları, uygulamanın iş mantığından ayrı, herhangi bir uygulamada ihtiyaç duyulabilecek konulardır. Verilebilecek en genel ve en iyi örnek logging veya caching işlemleridir. Ne tür bir uygulama yapıyor olursak olalım büyük ihtimalle bir noktada loglama ihtiyacımız olacaktır. Bu ihtiyaç cross cutting concerns konsepti içerisinde değerlendirilebilir çünkü iş mantığından bağımsız, herhangi bir noktada ihtiyaç duyulabilecek bir gereksinimdir.

Spring, DI ile sınıflar arası bağımlılığı nasıl azaltma imkanı sunduysa, AOP ile de bu cross cutting concerns konsepti içerisinde değerlendirilebilecek gereksinimlerle etkilenen sınıflar arasında ayrım imkanı sunar. Bu sayede sınıflarımızda iş mantığında ihtiyacımız olan şeyler dışında ele almamız gereken bir konu olmaz ve loglama konusunu ayrı bir noktada ele aldığımız için uygulama içerisinde ihtiyacımız olan her noktada kullanabiliriz.

AOP ile tekrar kullanılabilirlik (reusability), genişletilebilirlik (extensibility), bakım yapılabilirlik (maintainability), modülerlik gibi konularda uygulamamızı daha iyi noktalara taşımış oluruz.

Sonuç Olarak…

Sonuç olarak, Spring Framework yukarıda bahsettiğimiz MVC mimarisini sağlaması, DI, IoC, AOP ve daha birçok özelliği ile enterprise Java uygulamalarımız için kullanışlı ve yararlı bir model. Sağladığı bu özelliklerle de en popüler uygulama geliştirme frameworkü olmaya devam ediyor.

Teorik anlamda bu kadar temel bilgi yeterli olacaktır. Önümüzdeki derslerde elimizi kirletmeye başlıyoruz. Çalışmamızı yürüteceğimiz bir IDE belirleyip, teoriğini anlattığımız bu özellikleri kodlayarak da anlamaya çalışacağız.

Tüm Spring Dersleri için tıklayınız..

Osman Alper Öcal

Software Engineer. Web developer. MS candidate.

2 Yorum

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?