Kelas Spring Framework dan Spring Boot
Pengenalan Diri
- Nama: Eko Kurniawan Khannedy
- Pekerjaan: Teknik Arsitek di e-commerce terbesar di Indonesia
- Pengalaman: 10+ tahun
- Konten: Programming di website dan YouTube channel 'Programmer Zaman Now'
- Kontak: Telegram, sosial media Programmer Zaman Now
- Email: [disediakan]
Agenda Kelas
- Dasar-dasar Spring Framework dan Spring Boot
- Konsep Inversion of Control (IoC)
- ApplicationContext
- Dependency Injection
- Lifecycle, Scope, dan Dependency Management
- Bean and Bean Factories
- Spring Boot Features
- Event Handling
- Menjalankan aplikasi dengan Spring Boot Plugin
- Konfigurasi dan Customisasi
Pengenalan Spring Framework
- Spring Framework: Framework populer di Java untuk aplikasi desktop, web, dan enterprise
- Mengalahkan Java Enterprise (Jakarta Enterprise)
- Dibuat oleh Rod Johnson tahun 2003
- Bersifat ringan dan lebih murah untuk hardware dibandingkan Java Enterprise
- Website: spring.io
Spring Boot
- Mempermudah pembuatan aplikasi Spring
- Automatisasi konfigurasi yang biasanya manual dan kompleks
- Selalu digunakan bersamaan dengan Spring Framework di aplikasi modern
- Membantu integrasi dengan berbagai teknologi lain
Mengapa Menggunakan Spring?
- Framework Java paling populer
- Banyak bahasa yang bisa berjalan di JVM (Java Virtual Machine): Kotlin, Groovy, Scala
- Digunakan di banyak perusahaan besar (contoh: Netflix)
- Ekosistem pendukung sangat besar
- Mudah mengintegrasikan teknologi lain seperti database NoSQL (MongoDB, Cassandra) maupun konsul
Membuat Project Spring
- Gunakan Spring Initializr (start.spring.io) untuk generate projek
- Pilih tipe project, language, dan dependencies (contoh: Lombok)
- Pilih versi Java (contoh: Java 11)
- Generate dan import project ke IDE favorit
Inversion of Control (IoC)
- Prinsip pemindahan kontrol objek/kode ke container di dalam framework
- Spring sebagai IoC container disebut ApplicationContext
- ApplicationContext mengelola objek/kode program
- Parameter didefinisikan menggunakan @Configuration
ApplicationContext
- Kontainer inti dari Spring Framework untuk manajemen objek
- Interface turunan dari BeanFactory
- Membaca definisi konfigurasi untuk membuat dan mengelola bean
Bean
- Objek yang dikelola oleh Spring container
- Default bernilai singleton
- Dibuat menggunakan @Bean di dalam kelas konfigurasi
- NAME sebagai nama bean
- Annotasi seperti @Primary dan @Qualifier untuk mengatur prioritas dan pemilihan bean
Dependency Injection (DI)
- Otomatisasi pemenuhan objek yang dibutuhkan oleh objek lain
- Dibuat dan di-inject secara otomatis oleh Spring
- Bisa menggunakan constructor injection, setter injection, atau field injection
- Annotasi yang digunakan: @Autowired untuk injection
- Contoh: Menggunakan DI dengan constructor, setter, atau field langsung di @Component
Scope
- Strategi cara objek dibuat dan dikelola
- Default: Singleton (satu objek untuk satu kontainer)
- Prototype: Membuat objek baru setiap akses
- Request, Session, Application, WebSocket (khusus aplikasi web)
- Scope dipilih menggunakan @Scope anotasi
Lifecycle Bean
- Hook metoda inisialisasi dan destruksi bean
- Mengimplementasikan InitializingBean dan DisposableBean interface atau dengan annotasi @PostConstruct dan @PreDestroy
- Contoh: Membuat koneksi ke database pada inisialisasi dan menutupnya pada destruksi
ApplicationContextAware dan BeanNameAware
- Interface khusus untuk mengakses ApplicationContext atau BeanName di dalam bean
- Menggunakan callback method seperti
setApplicationContext
atau setBeanName
Event Handling
- Spring menyediakan event mechanism untuk komunikasi antar komponen
- Membuat event listener dengan @EventListener atau mengimplementasikan ApplicationListener interface
- Contoh: Membuat listener untuk menangani login success event
Spring Boot Plugin
- Menggunakan spring-boot-maven-plugin untuk mempermudah menjalankan dan membangun aplikasi
- Menjalankan aplikasi dengan
mvn spring-boot:run
- Membuat distribution file dengan
mvn package
(fat JAR)
Customizing Spring Application
- Menggunakan kelas SpringApplication untuk custom configuration
- Menambahkan listeners, inisialisasi, banner, dan banyak lagi
- Contoh: Mematikan banner saat startup
Event Specific to Spring Boot
- Application Events yang dikeluarkan pada berbagai tahap aplikasi (mulai, inisialisasi, siap, gagaldasr, dll)
- Example: ApplicationStartingEvent, ApplicationReadyEvent
- Menggunakan SpringApplication setListeners untuk menangkap event ini
Usage of CommandLineRunner and ApplicationRunner
- Menjalankan kode setelah aplikasi Spring Boot berjalan
- Mengambil command-line arguments melalui runner
- Menggunakan @Component dan implementasi interface CommandLineRunner atau ApplicationRunner
- ApplicationRunner memiliki parsing tambahan pada argumen
Method Testing with Spring Boot Test
- Menggunakan @SpringBootTest untuk menandai kelas testing
- Dependency injection di dalam testing
- Menjalankan Spring Boot context saat testing application
Conclusion
Ini adalah overview dari topik Spring dan Spring Boot yang mencakup dasar-dasar seperti pemahaman mengenai bean, dependency injection, lifecycle, konfigurasi, dan event handling serta penggunaan Spring Boot untuk efisiensi dan kemudahan development. Ide utamanya adalah pemahaman bahwa Spring mengelola bean dan dependency secara otomatis, membuat development lebih modular dan terstruktur.