1) Spring framework nedir?
Spring, Java platformlarını kullanarak çeşitli uygulama türlerinin geliştirilmesine yardımcı olan bir framework’tür. Basit ve kullanımı kolaydır. Gerçek zamanlı teknik sorunların çözülmesine yardımcı olur. Spring, WEB MVC, IOC, DAO, AOP, Context ve ORM gibi birden fazla modül içerir.
2) Spring Boot nedir ve Spring Framework’ten farkı nedir?
Spring Boot, Java tabanlı bir framework olan Spring Framework üzerine inşa edilmiş, geliştiricilerin çok daha hızlı ve kolay bir şekilde bağımsız (standalone), üretime hazır (production-ready) uygulamalar geliştirmesini sağlayan bir çerçevedir.
Spring Framework: Bir iskelet. Geniş, esnek ama yapılandırması zahmetli.
Spring Boot: Bu iskeleti kullanarak hızlı ve kolay uygulama geliştirmeyi sağlar
3) Bean nedir? Spring konteyneri nedir ve nasıl çalışır?
“Spring Bean” ve “Spring konteyneri”, Spring Framework’ ün temel yapı taşlarındandır. Java ile geliştirme yapanlar için Spring, nesne yönetimini kolaylaştırır.
Spring Bean, Spring IoC (Inversion of Control) Container tarafından yönetilen nesnedir. Başka bir deyişle, Spring uygulaması içinde yaşam döngüsü Spring tarafından kontrol edilen bir Java sınıfıdır.
Spring’de, uygulamanızın omurgasını oluşturan ve Spring IoC konteyneri tarafından yönetilen nesnelere fasulye denir. Bir fasulye, bir Spring IoC konteyneri tarafından örneklenen, birleştirilen ve yönetilen bir nesnedir. Aksi takdirde, bir fasulye, uygulamanızdaki birçok nesneden sadece biridir. Fasulyeler ve aralarındaki bağımlılıklar, bir konteyner tarafından kullanılan yapılandırma meta verilerinde yansıtılır.
Java uygulamalarını geliştirmek için kullanılan Spring Framework, iş mantığı bileşenlerini ve nesnelerini yönetmek için “Spring Bean” adı verilen bir bileşen modeli kullanır. Spring Bean’ler, uygulamanızın farklı parçalarını temsil eden ve Spring Container tarafından yönetilen nesnelerdir.
Spring Bean, bir Java sınıfı veya bileşeni gibi düşünülebilir ve Spring Container tarafından yönetilir. Bu, Spring uygulamanızda kullanmak istediğiniz her türlü nesnenin bir Spring Bean olabileceği anlamına gelir. Spring Container, bu nesneleri oluşturur, yapılandırır, yönetir ve sonlandırır.
4) Spring’de Dependency Injection (bağımlılık enjeksiyonu) nedir?
Bağımlılık Enjeksiyonu (DI), uygulamayı yönetmeyi ve test etmeyi kolaylaştıracak şekilde programlama kodundaki bağımlılığı ortadan kaldıran bir tasarım modelidir. Dependency Injection Spring’in en önemli parçasıdır ve Inversion of Control’ ün bir uygulama metotudur. Dependency Injection, programlama kodunun gevşek bir şekilde bağlanmasını ve daha kolay test etmeyi sağlar.
5) IoC Nedir?
Bir framework ü extend ettiğimizde yani uygulamayı ayağa kaldırdığımızda, framework kontrolü kendisi ele alır. Yani hangi objeleri nasıl oluşturacağını, hangi objelerin arasında dependency ler olması gerektiğini ve nasıl yöneteceğini( Dependency Injection), hangi metotları çağıracağını, hangi excepcionları oluşturup hangi eventleri fırlatacağını, sonuç olarak bütün bunlara karar veren yapı framework ün kendisidir. Buna Inversion of Control denir.
Framework akış kontrolünü ele aldığı zaman IoC olur.
6) Spring @RestController nedir?
@RestController ek açıklaması RESTful web servislerini oluşturmak için kullanılır. @RestController sınıfları, @Controller sınıflarına benzer bir şekilde çalışır. Ancak, @Controller’dan farklı olarak her metot çağrısı varsayılan olarak verileri JSON veya XML formatında döndürmek üzere optimize edilmiştir.
7) IoC(Inversion of Control) container ne işe yarar? Faydaları nelerdir?
Spring IoC Container, uygulamanızdaki nesnelerin oluşturulması, konfigürasyonu ve bağımlılıklarının yönetilmesi işlerini sizin yerinize yapar. Böylece gevşek bağlı (loosely coupled) ve daha kolay test edilebilir bir mimari elde edilir.
Inversion of Control (IoC), bir yazılım tasarım prensibidir. Temel fikri şudur:
“Nesneleri veya bağımlılıkları uygulama içinde kendin oluşturma, bu sorumluluğu bir framework veya dış bir mekanizmaya bırak.”
Eskiden programcılar, ihtiyaç duydukları nesneleri new anahtar kelimesiyle doğrudan oluştururdu. Bu, uygulamayı sıkı sıkıya bağımlı hale getirir ve bakımı zorlaştırır. IoC yaklaşımıyla ise programın akışını programcı değil, framework (örneğin Spring) yönetir. Yani “kontrolün tersine çevrilmesi” durumu gerçekleşir.
8) Spring Boot’ta application.properties vs application.yml farkları nelerdir?
Spring Boot’ta hem application.properties hem de application.yml dosyaları, uygulamanın yapılandırma (konfigürasyon) ayarlarını tutmak için kullanılır. Her ikisi de aynı işlevi görür, ancak sözdizimleri ve okunabilirlikleri bakımından farklıdırlar.
application.properties
- Anahtar-değer (key=value) şeklinde yapılandırılır.
- Düz, basit yapılıdır.
Küçük ve orta ölçekli projelerde daha yaygındır.

application.yml (YAML)
- Yamuk hiyerarşik yapı (indentation) kullanır.
- Daha okunabilir ve gruplama (nesting) konusunda daha esnektir.
- Büyük, modüler veya karmaşık konfigürasyonlarda tercih edilir.

9) Spring MVC mimarisi nasıl çalışır?
Spring MVC (Model-View-Controller), Spring Framework’ün bir parçası olan web tabanlı bir mimaridir ve HTTP isteklerini karşılama, işleme ve sonuçları istemciye döndürme sürecini yöneten güçlü bir yapıdır.
Spring MVC’nin Temel Bileşenleri
- DispatcherServlet
Tüm gelen HTTP isteklerinin ilk ulaştığı merkez bileşendir (Front Controller). - Controller (denetleyici)
İsteği alır, iş mantığını başlatır ve sonucu bir model + view nesnesi olarak döndürür. - Service (İş Katmanı)
Controller’dan gelen işlemleri gerçekleştirir. (İş mantığı burada yazılır.) - Repository / DAO (Veri Katmanı)
Veritabanıyla iletişim kurar. JPA, JDBC, Hibernate vb. ile kullanılır. - Model
Uygulama verisini temsil eder (örn. User, Product gibi sınıflar). - View
Sonuç kullanıcıya sunulmadan önceki arayüzdür (HTML, JSP, Thymeleaf, JSON vs.).
Spring MVC Akış Diyagramı (Adım Adım)
- Kullanıcı HTTP isteği gönderir (örneğin: /users/1).
- DispatcherServlet isteği karşılar ve uygun Controller’ı bulmak için HandlerMapping kullanır.
- Uygun Controller sınıfı çağrılır ve metot çalıştırılır (örneğin @GetMapping(“/users/{id}”)).
- Controller, iş mantığını Service katmanına delegeler (örneğin userService.getUserById(id)).
- Service katmanı, gerekirse veriye erişmek için Repository katmanına erişir.
- Gerekli işlemler bittikten sonra Controller, Model + View (veya sadece JSON) döner.
- DispatcherServlet, bu bilgileri ViewResolver yardımıyla uygun görünüm (view) ile eşleştirir.
- Sonuç kullanıcıya render edilir (örneğin bir HTML sayfası veya JSON yanıt).
Özetle
- Controller → Kullanıcıdan gelen isteği alır.
- Service → İş mantığını çalıştırır.
- Repository → Veritabanına erişir.
- Model → Taşınan veridir.
- View → Gösterilecek son arayüzdür (HTML/JSON/XML).
- DispatcherServlet → Her şeyi yöneten merkezi trafik polisi.
10) Maven nedir? Ne amaçla kullanılır? Faydaları nedir?
Spring Boot, Maven’ ın Standart Dizin(Klasör) Yapısını kullanır.
Maven; Bir Proje geliştirme aracıdır. Maven, Derleme yöntemidir ve bağımlılıklar için kullanılır. Maven şu problemleri çözmemizi sağlar:
- Java projelerimizi oluştururken Spring, JAR dosyaları, Hibernate JAR Dosyaları gibi EK JAR dosyalarına ihtiyaç duyabiliriz. JAR dosyalarını her bir projenin web sitesinden indirmek ve ardından bu JAR dosyalarını derleme yolunuza veya sınıf yolunuza manuel olarak eklemektir. Programcı olarak tüm bu gereksinimlerin web sitesine giderek indirmem gerekiyor. İşte tam bu noktada Maven bu manuel yaptığımız işleri bizim için yapabilmektedir. Maven bizim için gerekli JAR dosyalarını internetten indirmektedir. Özetle Maven a alışveriş listemizi veriyoruz ve Maven bu alışveriş listesindekileri deposundan bize veriyor. Uygulamamızı derleyip çalıştırdığımızda Maven derleme ve sınıf yolunu bizim için halledebilmektedir.
- Bir uygulamaya başlandığında her yazılımcı ya da yazılım ekibi kendi dizin(klasör) yapısını hayal eder ama sonra ekip değiştiğinde veya yazılımcı değiştiğinde mevcut dizin yapısı ideal değildir ve standartlaştırılmamıştır. Maven standart bir dizin(klasör) yapısı sağlayarak bu sorunu çözer
Maven’ in Avantajları:
– Bağımlılık Yönetimi: Maven projemiz için gerekli JAR dosyalarını bizim için bulur.
– Projelerimizi inşa etmek ve çalıştırmak yani derleme ve sınıf yolu konusunda endişelenmemize gerek kalmaz.
– Standart Dizin yapısına sahiptir. Başka bir ekibin yarım kalmış projesinde zorluk çekmeyiz. Ve projeyi kendi ide mize taşıyabiliriz.
– ilk 3 madde sayesinde Maven daha Kurumsaldır diyebiliriz.
11) Spring @Controller nedir?
@Controller, Spring Framework’te bir sınıfı denetleyici bileşen olarak işaretlemek için kullanılır. Web uygulamalarını yapılandırılmış bir şekilde oluşturmak için kullanılan Spring MVC (Model-View-Controller) mimarisinin bir parçasıdır.
@Controller, bir sınıfın Spring MVC’de bir denetleyici (controller) olarak işlev görmesini sağlar. Denetleyiciler, istemciden gelen talepleri alır, işler ve sonuç olarak bir görünüm (view) döndürür.
Bir sınıfa @Controller ile açıklama eklediğinizde, Spring onu bir denetleyici olarak tanır. HTTP isteklerini işlemesine ve HTTP yanıtları oluşturmasına izin verir. Denetleyiciler, kullanıcı isteklerini işlemekten, uygulamanın iş mantığıyla (hizmetler) etkileşim kurmaktan ve yanıtı oluşturmak için uygun görünümü döndürmekten sorumludur. Spring Controller ek açıklaması genellikle @RequestMapping ek açıklamasına dayalı açıklamalı işleyici yöntemleriyle birlikte kullanılır.
12) Spring Framework’te kaç modül var ve bunlar nelerdir?
Spring, farklı modüllerden oluşur ve her bir modül belirli bir geliştirme alanına odaklanır. Spring, yaklaşık 20 modül halinde düzenlenmiş özelliklerden oluşur.
Spring framework, core, beans, context, expression language, AOP, Aspects, Instrumentation, JDBC, ORM, OXM, JMS, Transaction, Web, Servlet, Struts vb. gibi birçok modülden oluşur.
Bu modüller, aşağıdaki şemada gösterildiği gibi Core Container, Data Access/Integration, Web, AOP (Aspect Oriented Programming), Instrumentation, ve Test olarak gruplandırılmıştır.
13) Spring yapılandırma dosyası nedir?
Spring yapılandırma dosyası, .xml uzantılı, sınıflar ve arayüzler ile ilgili bilgileri içeren XML dosyasıdır. Bu dosya, sınıfların nasıl yapılandırıldığını ve birbirlerine nasıl tanıtıldığını açıklar.
Spring yapılandırma dosyası, Spring Framework’ün Inversion of Control (IoC) prensibi ve bağımlılık enjeksiyonu mekanizmasını kullanarak uygulamanın bileşenlerini yönetmesine yardımcı olur.
14) Spring’in farklı bileşenleri nelerdir?
Spring uygulamaları genellikle farklı amaçlara hizmet eden, farklı tipte bileşenler içerir. Bir Spring uygulaması genel olarak aşağıdaki bileşenlerden oluşur:
✔️ User Program: Fonksiyonları kullanır.
✔️ Interface: Fonksiyonları tanımlar.
✔️ Bean class: Spring’in temel bileşeni olan Bean class, özellikleri ve işlevleri içerir.
✔️ Spring Aspect Oriented Programming (AOP): Kesişen konuların işlevselliğini sağlar.
✔️ Bean Configuration File: Sınıfların bilgilerini ve bunların nasıl yapılandırılacağını içerir.
15) Kaç çeşit IoC container vardır?
İki tür IoC konteyneri vardır:
1️.BeanFactory: Spring’de tanımlanan ve yönetilen nesneleri (bean’leri) oluşturma, konfigüre etme ve yönetme işlevlerini sağlar. BeanFactory, özellikle büyük ve karmaşık uygulamalarda, bean’leri gecikmeli (lazy) veya önceden yaratılmış (pre-instantiated) olarak oluşturmanıza, bu bean’lerin yaşam döngüsünü yönetmenize ve bağımlılık enjeksiyonunu gerçekleştirmenize olanak tanır.
XmlBeanFactory, BeanFactory arayüzünün uygulama sınıfıdır. BeanFactory’yi kullanabilmek için XmlBeanFactory sınıfı kullanılır.
2️.ApplicationContext: ApplicationContext arayüzü, BeanFactory arayüzünün üzerine inşa edilmiştir. BeanFactory’nin üstünde bazı ekstra işlevler oluşturmayı sağlar.
ClassPathXmlApplicationContext sınıfı, ApplicationContext arayüzünün uygulama sınıfıdır. ApplicationContext’i kullanabilmek için ClassPathXmlApplicationContext sınıfını aşağıda verildiği gibi başlatmanız gerekir.
16) @Component, @Service, @Repository anotasyonlarının farkı nedir?
@Component
- En genel anotasyondur.
- Spring tarafından otomatik olarak algılanması istenen herhangi bir bileşene konur.
- Genellikle sınıfları Spring’e bean olarak tanıtmak için kullanılır.
@Service
- @Component’in özel bir formudur.
- İş katmanı (business logic layer) sınıflarına konur.
- Anlamsal olarak, bu sınıfın bir “servis” (hizmet sağlayıcı) olduğunu ifade eder.
- Ekstra davranış eklemez ama okunabilirliği artırır (örneğin mimari analiz araçları için anlam taşır).
@Repository
Yani JDBC gibi düşük seviye hataları, Spring’in veri erişim istisna hiyerarşisine dönüştürür.
Yine @Component’ten türemiştir.
Veri erişim katmanındaki (DAO) sınıflar için kullanılır.
Ek olarak, Spring bu anotasyonu taşıyan sınıflar için:
- Veritabanı ile ilgili çevreleme (exception translation) işlemlerini uygular (örn. SQLException → DataAccessException).