Spring’de Dependency Injection (DI) ve Inversion of Control (IoC)

sametklou

Spring’de Dependency Injection (DI) ve Inversion of Control (IoC)

Spring, Java tabanlı güçlü bir framework'tür ve Dependency Injection (DI) ve Inversion of Control (IoC) gibi önemli prensipleri destekler. Bu yazıda, Spring'de bu prensiplerin nasıl kullanıldığını ve nasıl çalıştığını detaylı bir şekilde ele alacağız.

Dependency Injection Nedir?

Dependency Injection, bir sınıfın diğer sınıflara olan bağımlılıklarının dışarıdan verilmesi prensibidir. Bu sayede sınıflar arasındaki bağımlılıklar azaltılır ve kod daha esnek hale gelir. Spring'in @Autowired annotation'ı sayesinde bu prensibi kolayca uygulayabiliriz.

Örnek bir @Autowired kullanımı:

@Component
public class UserService {

    @Autowired
    private UserRepository userRepository;

    // constructor, getter ve setter metotları
}

Yukarıdaki örnekte, UserService sınıfı UserRepository sınıfına bağımlıdır ve bu bağımlılık @Autowired annotation'ı ile çözülür.

Inversion of Control Nedir?

Inversion of Control, bir framework veya container tarafından sınıfların yaşam döngüsünün kontrol edilmesi prensibidir. Spring'in IoC container'ı, sınıfların oluşturulması, bağımlılıkların çözülmesi ve yaşam döngülerinin yönetilmesi gibi görevleri üstlenir. Bu sayede geliştirici class'ların bu görevlerle ilgilenmesine gerek kalmaz ve kod daha modüler hale gelir.

Spring'de IoC container'inin nasıl kullanıldığını aşağıdaki örnekle görebiliriz:

@Configuration
@ComponentScan("com.example")
public class AppConfig {

    @Bean
    public UserService userService() {
        return new UserService();
    }

    @Bean
    public UserRepository userRepository() {
        return new UserRepository();
    }
}

Yukarıdaki örnekte, AppConfig sınıfı IoC container'ı tanımlar ve UserService ve UserRepository bean'lerini oluşturur.

Bu yazıda, Spring'de Dependency Injection ve Inversion of Control prensiplerini detaylıca inceledik. Bu prensipleri kullanarak kodunuzu daha esnek hale getirebilir ve daha kolay bir şekilde yönetebilirsiniz. Bu konu hakkında daha fazla bilgi edinmek için Spring'in resmi dokümantasyonuna göz atabilirsiniz.