Spring @Autowired Anotasyonu Nedir ve Nasıl Kullanılır?
Spring @Autowired anotasyonu, Spring Framework’te otomatik bağımlılık enjeksiyonu (Dependency Injection – DI) yapmak için kullanılan temel anotasyonlardan biridir.
Spring Boot ile uygulama geliştiren herkesin mutlaka anlaması gereken bu yapı, sınıflar arasındaki bağımlılıkları manuel olarak yönetmek yerine Spring Container’a bırakmanızı sağlar.
Bu rehberde:
- @Autowired anotasyonu nedir?
- Ne zaman ve nasıl kullanılır?
- Constructor, Setter ve Field Injection farkları
- En iyi kullanım önerileri (2025)
Spring @Autowired Anotasyonu Nedir?
@Autowired, Spring tarafından yönetilen bir bean’in, başka bir bean’e otomatik olarak enjekte edilmesini sağlar.
Spring Framework, Dependency Injection prensibi üzerine kuruludur. Bu sayede sınıflar, ihtiyaç duydukları bağımlılıkları kendileri oluşturmaz; Spring bu bağımlılıkları onlar adına sağlar.
Kısaca:
@Autowired = “Bu bağımlılığı Spring benim yerime enjekte etsin”
@Autowired anotasyonu aşağıdaki yerlerde kullanılabilir:
- Alan (Field) enjeksiyonu
- Setter metodu enjeksiyonu
- Yapıcı (Constructor) enjeksiyonu
@Autowired Anotasyonu Nasıl Etkinleştirilir?
Spring Boot uygulamalarında ekstra bir ayar yapmanıza gerek yoktur. @SpringBootApplication anotasyonu sayesinde, Spring otomatik olarak bileşen taraması (component scanning) yapar.
@SpringBootApplication
public class EgitimApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(EgitimApplication.class, args);
}
}
Bu yapı sayesinde:
- Aynı paket ve alt paketlerdeki
@Service,@Repository,@Componentanotasyonlu sınıflar bean olarak kaydedilir - @Autowired ile bu bean’ler kolayca enjekte edilebilir
@Autowired Kullanım Çeşitleri
1. Constructor (Yapıcı) Enjeksiyonu – Önerilen
Constructor injection, Spring tarafından en çok önerilen bağımlılık enjeksiyonu yöntemidir.
@Service
@Transactional
public class AccountService {
private final UserRepository userRepository;
@Autowired
public AccountService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
Avantajları:
- Bağımlılıklar zorunlu hale gelir
- Immutable (değiştirilemez) yapı sağlar
- Test edilebilirlik artar
2. Setter Metodu Enjeksiyonu
Setter injection, bağımlılığın sonradan değiştirilmesi gereken durumlarda kullanılabilir.
@Service
@Transactional
public class AccountService {
private UserRepository userRepository;
@Autowired
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
Ancak zorunlu bağımlılıklar için önerilmez.
3. Alan (Field) Enjeksiyonu
En sık kullanılan ama en az önerilen yöntemdir.
@Service
@Transactional
public class AccountService {
@Autowired
private UserRepository userRepository;
}
Dezavantajları:
- Test yazmayı zorlaştırır
- Bağımlılıklar gizlenir
- Immutable yapı kurulamaz
@Autowired Kullanırken Bilmeniz Gerekenler
1. Birden Fazla Bean Varsa Ne Olur?
Spring, varsayılan olarak bean’leri türüne göre enjekte eder. Aynı türden birden fazla bean varsa:
NoUniqueBeanDefinitionException
Bu durumda @Qualifier kullanmalısınız:
@Autowired
@Qualifier("userRepositoryImpl")
private UserRepository userRepository;
2. @Autowired Neden Bazen Çalışmaz?
Eğer bir sınıfı new anahtar kelimesi ile manuel olarak oluşturursanız,
Spring bu sınıfı yönetmez ve dependency injection gerçekleşmez.
Çözüm:
- Sınıfı Spring bean’i yapın
- Spring tarafından oluşturulmasını sağlayın
Sonuç
Bu yazıda, Spring @Autowired anotasyonunun ne olduğunu, nasıl çalıştığını ve farklı enjeksiyon yöntemlerini detaylı şekilde ele aldık.
Özetle:
- Constructor Injection → en doğru yaklaşım
- Setter Injection → opsiyonel bağımlılıklar
- Field Injection → mümkünse kaçınılmalı
Sık Sorulan Sorular (FAQ)
@Autowired nedir?
Spring Framework’te otomatik bağımlılık enjeksiyonu yapmak için kullanılan anotasyondur.
@Autowired yerine ne kullanılmalı?
Constructor injection tercih edilmeli, mümkünse @Autowired bile yazılmadan
yapıcı üzerinden enjeksiyon yapılmalıdır.
Spring Boot’ta @Autowired zorunlu mu?
Hayır. Tek constructor varsa Spring otomatik olarak enjeksiyon yapar.
İlgili İçerikler
Son Güncelleme: 2025
İyi çalışmalar ve başarılar! 🚀