Mengenal Investion of Control (IOC) dan Dependendy Injection Sekilas Spring


Inversion of Control

    Inversion of Control (IoC) adalah sebuah design prinsip dimana komponen software menerima dependencies dari sumber yang berada di luar source. Jadi dibandingkan dengan software tradisional yang mengatur sendiri apa saja dependensinya IoC bertindak sebaliknya. Maksudnya bagaimana, dulu ketika awal-awal membuat program pernah membuat program seperti ini :

  • masukkan nama, simpan nama, lanjut ke alamat
  • masukkan alamat, simpan alamat, lanjut ke cetak
  • cetak data diri
pada konsep IoC bedanya adalah 
  • jika user mengisi kolom nama maka simpan nama
  • jika user mengisi kolom alamat maka simpan alamat
  • jika user pilih data diri cetak, lakukan pencetakan data diri
    Jika pada awal program bersifat sequence, program kedua bersifat jika maka. Sekarang kita banyak merasakan program yang cara kerjanya seperti program ke dua ini.  Dalam program berbasis OOP apabila sebuah object A melakukan method method1 dimana di dalam method1 terdapat pembuatan object B dari kelas B, hal ini bisa menimbulkan tight-coupling / ketergantungan yang kuat antara Object A dan B. IoC berperan agar pada Object A tidak lagi melakukan pengaturan dan atau pembuatan terhadap Object B, sehingga Object A dan B tidak memiliki ketergantungan yang kuat.

Dependency Injection (DI)

    Salah satu contoh penerapan IoC adalah dengan pattern dependency injection (DI). Untuk mengatasi ketergantungan antar object dalam pattern DI object yang dibutuhkan akan diinject ke dalam object yang membutuhkannya. Sebagai contoh bisa dilihat seperti berikut

Tidak menggunakan pattern DI

Menggunakan pattern DI


    Seperti terlihat pada yang menggunakan DI BankAccount diinject melalui parameter pada method. Sehingga kelas Account tidak mengatur bagaimana BankAccount dibentuk fokus kepada apa yang diubah saja dimethod tersebut. Berbeda dengan yang tidak menggunakan pattern DI object BankAccount dibuat didalam methodnya.

Bagaimana di Spring 

    Spring banyak menggunakan penerapan IoC melalui konsep DI. Pada Spring dikenal istilah Beans yang merujuk pada sebuah object yang dikelola oleh Spring IoC Container. Pada spring framework di package org.springframework.beans dan org.springframework.context terdapat 2 interface yang menjadi backbone dalam mengatur beans ini yaitu BeanFactory yang kemudian memiliki sub-interface bernama ApplicationContext. Pada Spring sendiri untuk "membuat" Dependency Injection bisa dengan cara berikut :

Constructor-Based Injection (CDI) 

DI dimasukkan melalui constructor ketika kelas tersebut di deklarasikan. 
 
@Configuration
public class PaymentConfig {
    @Bean
    public PaymentService service() {
        return new PaymentServiceImpl();
    }
    
    @Bean
    public PaymentOverbook paymentOBCons() {
        return new PaymentOverbook(service());
    }
} 


Bisa terlihat bahwa PaymentService diinject melalui constructor PaymentOverbook secara langsung.

Setter-Based Injection (SDI)

DI dimasukkan melalui method setter dari object tersebut.
 
@Configuration
public class PaymentConfig {
    @Bean
    public PaymentService service() {
        return new PaymentServiceImpl();
    }
        
    @Bean
    public PaymentOverbook paymentOBSetter() {
        PaymentOverbook paymentOverbook = new PaymentOverbook();
        paymentOverbook.setPaymentService(service());
        return paymentOverbook;
    }
}
 

Beans paymentOBSetter melakukan inject melalui method setPaymentService.


Source code versi github bisa anda lihat di github berikut.

Referensi

Posting Komentar untuk "Mengenal Investion of Control (IOC) dan Dependendy Injection Sekilas Spring"