Sebuah bean scope mengontrol berapa banyak instance yang dibuat container dan berapa lama mereka hidup. Lifecycle callback memungkinkan Anda menjalankan kode tepat setelah sebuah bean dikonstruksi dan tepat sebelum ia dihancurkan.
Sebuah bean scope mengontrol berapa banyak instance yang dibuat container dan berapa lama mereka hidup. Lifecycle callback memungkinkan Anda menjalankan kode tepat setelah sebuah bean dikonstruksi dan tepat sebelum ia dihancurkan.
@Service // singleton by default — one shared OrderService for the whole app
public class OrderService { }
@Component
@Scope("prototype") // fresh instance on every getBean/inject
public class ReportBuilder { }
Jebakan klasik: meng-inject sebuah prototype ke dalam sebuah singleton. Singleton disambung sekali, sehingga ia menyimpan satu instance prototype selamanya — janji "baru setiap kali" pun rusak. Perbaiki dengan @Lookup, sebuah ObjectProvider<ReportBuilder>, atau scoped-proxy.
@Component
public class ConnectionPool {
@PostConstruct // runs after dependencies are injected, before use
public void open() { /* open sockets, warm caches */ }
@PreDestroy // runs on graceful container shutdown (singletons only)
public void close() { /* release resources */ }
}
Penting: Spring tidak memanggil @PreDestroy pada bean prototype — ia menyerahkannya dan berhenti melacaknya, sehingga Anda yang bertanggung jawab atas cleanup-nya.
Hal ini memisahkan orang yang memperlakukan Spring sebagai sihir dari mereka yang memahami container-nya. Bug singleton yang memegang prototype adalah skenario interview favorit karena ia halus dan menyebabkan bug produksi yang nyata. Mengetahui bahwa singleton harus stateless dan thread-safe (mereka dibagi di semua thread request) adalah kesimpulan praktis yang didengarkan interviewer.
Perpustakaan pertanyaan wawancara IT dengan jawaban mendetail — dari Junior hingga Senior.
Donasi