Bean scope hudhibiti idadi ya instances ambazo container huunda na muda wanaoishi. Lifecycle callbacks hukuwezesha kukimbia code mara tu baada ya bean kuundwa na kabla tu haijaharibiwa.
Bean scope hudhibiti idadi ya instances ambazo container huunda na muda wanaoishi. Lifecycle callbacks hukuwezesha kukimbia code mara tu baada ya bean kuundwa na kabla tu haijaharibiwa.
@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 { }
Mtego wa kawaida: kuingiza prototype ndani ya singleton. Singleton huunganishwa mara moja, hivyo hushikilia instance moja ya prototype milele — ahadi ya "mpya kila mara" huvunjika. Irekebishe kwa @Lookup, ObjectProvider<ReportBuilder>, au 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 */ }
}
Muhimu: Spring haiiti @PreDestroy kwenye prototype beans — huzikabidhi na kuacha kuzifuatilia, hivyo wewe unamiliki usafishaji wao.
Hii huwatofautisha watu wanaoichukulia Spring kama uchawi na wale wanaoelewa container. Bug ya singleton-ikishikilia-prototype ni hali pendwa katika mahojiano kwa sababu ni ya hila na husababisha bugs halisi za production. Kujua kuwa singletons lazima ziwe stateless na thread-safe (zinashirikiwa kuvuka request threads zote) ndio funzo la vitendo ambalo wahoji husikiliza.
Maktaba ya maswali ya mahojiano ya IT yenye majibu ya kina — kutoka Junior hadi Senior.
Changia