Satu bean scope mengawal berapa banyak instance yang dicipta bekas dan berapa lama ia hidup. Lifecycle callbacks membolehkan anda menjalankan kod sejurus selepas sesuatu bean dibina dan sebelum ia dimusnahkan.
Satu bean scope mengawal berapa banyak instance yang dicipta bekas dan berapa lama ia hidup. Lifecycle callbacks membolehkan anda menjalankan kod sejurus selepas sesuatu bean dibina dan sebelum ia dimusnahkan.
@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 { }
Perangkap klasik: menyuntik prototype ke dalam singleton. Singleton dipasang sekali sahaja, jadi ia menyimpan satu instance prototype selama-lamanya — janji "baharu setiap kali" pun terpecah. Betulkannya dengan @Lookup, 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 menjejakinya, jadi anda yang memiliki pembersihannya.
Ini membezakan orang yang menganggap Spring sebagai sihir daripada mereka yang memahami bekasnya. Pepijat singleton-menyimpan-prototype ialah senario temu duga kegemaran kerana ia halus dan menyebabkan pepijat produksi yang sebenar. Mengetahui bahawa singleton mesti tanpa keadaan dan selamat-benang (thread-safe) (ia dikongsi merentas semua benang permintaan) ialah pengajaran praktikal yang didengari penemu duga.
Pustaka soalan temu duga IT dengan jawapan terperinci — daripada Junior hingga Senior.
Derma