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
- https://www.baeldung.com/inversion-control-and-dependency-injection-in-spring diakses tanggal 21 Mei 2024
- https://www.linkedin.com/pulse/inversion-control-ioc-design-principle-jahid-momin/ diakses tanggal 21 Mei 2024
- https://martinfowler.com/bliki/InversionOfControl.html diakses tanggal 21 Mei 2024
- https://stackoverflow.com/questions/3058/what-is-inversion-of-control diakses tanggal 21 Mei 2024
- https://en.wikipedia.org/wiki/Inversion_of_control diakses tanggal 21 Mei 2024
- https://hackernoon.com/beginners-guide-to-inversion-of-control diakses tanggal 21 Mei 2024
- https://medium.com/@fullstacktips/spring-framework-understanding-containers-ioc-and-di diakses 22 Mei 2024.
- https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/beans.html diakses 23 Mei 2024
- https://www.geeksforgeeks.org/spring-dependency-injection-by-setter-method/ diakses 04 Juni 2024
Posting Komentar untuk "Mengenal Investion of Control (IOC) dan Dependendy Injection Sekilas Spring"
Berilah komentar, saran, dan kritik dengan bijak