Spring Temel Kavramlar

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.

IoC ile DI arasında nasıl bir ilişki var diye sorarsak: 

Örneğin bir nesne oluşturmak istersin → new anahtar kelimesiyle yaparsın.
Ama IoC diyor ki:
👉 “Sen new ile uğraşma, nesneleri ben (Spring) oluştururum.”

Yani kontrol sende değil, Spring’te. Bu yüzden adına “Inversion of Control” denir. Burada “Araba” sınıfı “Motor”a sıkı sıkıya bağlıdır. Motor değişirse, arabayı da değiştirmek zorundasın.

Dependency Injection, IoC’nin uygulanma şeklidir. Yani IoC bir “fikir”, DI ise bu fikrin “uygulama yöntemi”dir. Spring, nesneleri kendi oluşturur ve birbirine enjekte eder.

IoC = Nesneleri ben değil Spring oluşturacak,

DI = Spring oluşturduğu nesneleri birbirine bağlayacak.

İstemcinin bağımlılıklarını sağlama sorumluluğunun, başka bir nesneye devrettiği anlamına gelir. Yani belirli bir nesne için verilen bağımlılıkların veya yardımcı bileşenlerin enjekte edilmesidir. Örneğin nesnemiz bir araba olsun. Biz bir araba istediğimizde, araba fabrikası arabanın bağımlılıklarını ve bileşenlerini (Örneğin arabanın motoru, elektronik aksanını, egsozunu, kaportasını vb. parçalarını) bizim için birleşirir. Bu birleştirme işine Dependency Injection denir. Bu örnekte araba fabrikası Spring IoC konteyner’ dir.

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.

IoC; Nesneleri Manuel olarak kendimiz oluşturmak yerine bunu Spring IoC konteyner’ ın yapmasıdır. Spring Konteyner bir tür nesne fabrikası gibi çalışır.

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.

Spring Konteyner ın 2 temel işlevi vardır: IoC (Kontrolün Tersine Çevrilmesini) kullanarak nesneleri oluşturmak, kullanmak ve yönetmek daha sonra bağımlılık enjeksiyonunu kullanan nesne bağımlılıklarını enjekte etmektir.

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

  1. DispatcherServlet
    Tüm gelen HTTP isteklerinin ilk ulaştığı merkez bileşendir (Front Controller).
  2. Controller (denetleyici)
    İsteği alır, iş mantığını başlatır ve sonucu bir model + view nesnesi olarak döndürür.
  3. Service (İş Katmanı)
    Controller’dan gelen işlemleri gerçekleştirir. (İş mantığı burada yazılır.)
  4. Repository / DAO (Veri Katmanı)
    Veritabanıyla iletişim kurar. JPA, JDBC, Hibernate vb. ile kullanılır.
  5. Model
    Uygulama verisini temsil eder (örn. User, Product gibi sınıflar).
  6. View
    Sonuç kullanıcıya sunulmadan önceki arayüzdür (HTML, JSP, Thymeleaf, JSON vs.).

Spring MVC Akış Diyagramı (Adım Adım)

  1. Kullanıcı HTTP isteği gönderir (örneğin: /users/1).
  2. DispatcherServlet isteği karşılar ve uygun Controller’ı bulmak için HandlerMapping kullanır.
  3. Uygun Controller sınıfı çağrılır ve metot çalıştırılır (örneğin @GetMapping(“/users/{id}”)).
  4. Controller, iş mantığını Service katmanına delegeler (örneğin userService.getUserById(id)).
  5. Service katmanı, gerekirse veriye erişmek için Repository katmanına erişir.
  6. Gerekli işlemler bittikten sonra Controller, Model + View (veya sadece JSON) döner.
  7. DispatcherServlet, bu bilgileri ViewResolver yardımıyla uygun görünüm (view) ile eşleştirir.
  8. 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?

  • Spring MVC’de kullanılan bir annotation’dır.
  • Bir sınıfın web isteklerini (HTTP request) karşılayacağını belirtir.
  • Yani: “Bu sınıf, gelen isteklere cevap verecek bir Controller (denetleyici)” demektir.

Spring uygulaması çalıştığında, @Controller ile işaretlenmiş sınıflar Spring IoC Container tarafından taranır (component scan) ve bean olarak kaydedilir.

📌 Ne İşe Yarar?

  • HTTP isteklerini (GET, POST, PUT, DELETE) yakalar.
  • Model verisini işleyip, uygun View (sayfa/template) ile birlikte kullanıcıya döner.
  • Genellikle JSP, Thymeleaf, Freemarker gibi template motorları ile beraber kullanılır.

@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.

🚗 BENZETME: “Araba Servisi”

  • Düşün ki bir araba servisin var.
  • Araba için lastik, motor, cam gibi parçalar gerekiyor.
  • Bu parçaları elle tek tek sen takmak yerine, işi otomatik yapan bir sistem var.
  • İşte bu otomatik sistemi Spring’de IoC Container olarak düşünebilirsin.

1. IoC Container (Genel kavram)

“Ben nesneleri senin yerine oluştururum, bağımlılıklarını bağlarım, sen sadece kullan.”

Yani:

  • Araba sınıfının ihtiyacı varsa Lastik, Motor gibi nesneleri otomatik verir.

2. BeanFactory (Temel versiyon)

En basit hali.
“İhtiyacın olunca ben parçayı (bean) üretirim.”

  • Örnek: Araba tamircisi lastiği sadece ihtiyaç olunca depodan çıkarır.
  • Avantaj: Hafif ve hızlı.
  • Dezavantaj: Bazı gelişmiş özellikleri desteklemez.

BeanFactory factory = new XmlBeanFactory(new FileSystemResource(“beans.xml”));

Araba araba = (Araba) factory.getBean(“araba”);

3. ApplicationContext (Gelişmiş versiyon)

“Ben sadece parçayı üretmem, servisle ilgili ekstra işler de yaparım.”

  • Örnek: Lastiği çıkarırken aynı anda fatura keser, log tutar, müşteri memnuniyeti anketi gönderir.
  • Yani sadece nesne üretmekle kalmaz; event gönderme, mesajlaşma gibi ek özellikler de sunar.

ApplicationContext context = new ClassPathXmlApplicationContext(“beans.xml”);

Araba araba = (Araba) context.getBean(“araba”);

4. Spring Context (Gündelik terim)

İnsanlar ApplicationContext yerine bazen buna “Spring Context” der.

  • Teknik olarak bir sınıf değil.
  • Daha çok “konuşma dilinde” kullanılır:

“Spring context üzerinden al” → ApplicationContext’ten al demek.

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:

17) @Controller ve @RestController arasındaki fark nedir?

  • @ControllerView döndürür (HTML sayfası, JSP, Thymeleaf vb.)
  • @RestControllerJSON/XML gibi direkt veri döndürür (REST API için)

Aslında @RestController, @Controller + @ResponseBody birleşimidir.

/merhaba çağrıldığında:

  • merhaba.html dosyası açılır.
  • İçinde ${mesaj} yazarsan, ekrana "Spring MVC'den Selamlar!" gelir.

Yani bu kullanım sayfa (View) döndürür.

/merhaba çağrıldığında:

  • Direkt "Spring REST API'den Selamlar!" cevabı gelir.
  • Hiçbir view/template kullanılmaz.

Yani bu kullanım veri (JSON/String) döndürür.

18) @Autowired Nedir?

  • Spring Framework’te Dependency Injection (Bağımlılık Enjeksiyonu) yapmak için kullanılan bir anotasyondur.
  • Spring Container, @Autowired gördüğü yerde ilgili bean’i bulur ve oraya otomatik olarak enjekte eder.
  • Yani: “Bu sınıf, çalışmak için başka bir sınıfa ihtiyaç duyuyor. Spring, o bağımlılığı otomatik olarak bana ver” demektir.
  • @Autowired olmazsa uygulamada sürekli klasik New kullanımı(nesne oluşturma) olur ve bu da UserService, UserRepository sınıfına sıkı sıkıya bağımlı hale gelir. Eğer UserRepository yerine OracleUserRepository kullanmak istersek, kodu değiştirmek zorunda kalırız. Bu da esnekliği azaltır ve test etmeyi zorlaştırır.
  • new ile → sıkı bağlılık (tight coupling) oluşur. @Autowired ile → gevşek bağlılık (loose coupling) sağlanır. Yani @Autowired, sınıfların birbirine olan bağımlılığını azaltarak SOLID prensiplerine uygun yazılım geliştirmemizi sağlar.

📌 @Autowired Ne İşe Yarar?

Daha temiz, test edilebilir ve bakımı kolay kod yazmayı sağlar.

Kod içinde new anahtar kelimesiyle nesne üretmeye gerek kalmaz.

Spring Container, uygun bean’i bulup ilişkilendirir.

📊 Özet

  • @Autowired, Spring’in IoC Container’ına “Bu bağımlılığı otomatik olarak bul ve buraya ekle” talimatı verir.
  • Kullanım yerleri: field, constructor, setter.
  • Modern Spring projelerinde constructor injection en çok önerilen yöntemdir.

19) @Primary ve @Qualifier anotosyonları nedir? Ne işe yarar?

🚗 Günlük hayat benzetmesiyle anlatalım

Diyelim ki garajında iki araba var:

  • Bir BMW
  • Bir Mercedes

Sen yardımcına diyorsun ki:

“Garajdan arabayı getir!”

Ama yardımcı şaşırıyor:

“Hangisini getireyim patron? BMW mi, Mercedes mi?” 🤔

İşte Spring de böyle kararsız kalıyor.

🧩 İşte bu noktada 2 çözüm var:

  1. @Qualifier → “Hangisini istediğini açıkça söyle.”
  2. @Primary → “Varsayılan olarak hep bunu seç.”

🧠 1. @Qualifier — “Hangisini istiyorsan adını söyle”

Diyelim ki iki farklı sınıf var:

@Component(“bmw”)

public class BMW implements Araba {

    public void sur() { System.out.println(“BMW sürülüyor!”); }

}

@Component(“mercedes”)

public class Mercedes implements Araba {

    public void sur() { System.out.println(“Mercedes sürülüyor!”); }

}

Ve başka bir sınıfta araba kullanmak istiyorsun:

@Component

public class Sofor {

    @Autowired

    @Qualifier(“bmw”) // 👈 Hangisini istiyorsak belirtiyoruz

    Araba araba;

    public void yolaCik() {

        araba.sur();

    }

}

Spring şunu anlıyor:

“Tamam, bmw etiketli arabayı veriyorum.”

Sonuç:
BMW sürülüyor!

📌 @Qualifier = “Aynı tipte birden fazla nesne varsa, adını yazarak seç.”

🧠 2. @Primary — “Varsayılan olarak hep bunu kullan”

Yine aynı örnekte, diyelim ki sen hep Mercedes’i tercih ediyorsun.
Her seferinde @Qualifier("mercedes") yazmak istemiyorsun.

O zaman Mercedes sınıfına @Primary eklersin:

@Component

@Primary

public class Mercedes implements Araba {

    public void sur() { System.out.println(“Mercedes sürülüyor!”); }

}

Artık başka yerde şöyle yazsan bile:

@Autowired

Araba araba;

Spring otomatik olarak der ki:

“Tamam, varsayılan @Primary olan Mercedes’i kullanıyorum.”

Sonuç:
Mercedes sürülüyor!

📌 @Primary = “Birden fazla varsa, varsayılan olarak beni seç.”

⚙️ @Primary ve @Qualifier birlikte kullanılabilir mi?

Evet!
Genelde şöyle olur:

  • @Primary → en çok kullanılan nesneye koyarsın.
  • @Qualifier → özel durumlarda farklı bir nesne istersin.

Örnek:

@Autowired

@Qualifier(“bmw”)

Araba digerAraba;

Burada, varsayılan Mercedes olsa bile özel olarak BMW isteniyor.

Posted in Uncategorized

Write a comment