Një bean scope kontrollon sa instanca krijon container-i dhe sa gjatë jetojnë. Lifecycle callbacks ju lejojnë të ekzekutoni kod menjëherë pasi një bean ndërtohet dhe pak para se të shkatërrohet.
Një bean scope kontrollon sa instanca krijon container-i dhe sa gjatë jetojnë. Lifecycle callbacks ju lejojnë të ekzekutoni kod menjëherë pasi një bean ndërtohet dhe pak para se të shkatërrohet.
@Service // singleton by default — një OrderService i vetëm i ndarë për gjithë app-in
public class OrderService { }
@Component
@Scope("prototype") // instancë e freskët në çdo getBean/inject
public class ReportBuilder { }
Kurthi klasik: injektimi i një prototype në një singleton. Singleton-i lidhet një herë, kështu që mban një instancë të vetme prototype përgjithmonë — premtimi "i ri çdo herë" prishet. Rregulloje me @Lookup, një ObjectProvider<ReportBuilder>, ose scoped-proxy.
@Component
public class ConnectionPool {
@PostConstruct // ekzekutohet pasi varësitë injektohen, para përdorimit
public void open() { /* hap socket-et, ngroh cache-t */ }
@PreDestroy // ekzekutohet në shutdown-in e rregullt të container-it (vetëm singleton)
public void close() { /* liro burimet */ }
}
E rëndësishme: Spring nuk e thërret @PreDestroy mbi bean-et prototype — ai i dorëzon dhe ndalon t'i ndjekë, kështu që ju zotëroni pastrimin e tyre.
Kjo i ndan njerëzit që e trajtojnë Spring si magji nga ata që e kuptojnë container-in. Bug-u i singleton-it-që-mban-një-prototype është një skenar intervistë i preferuar sepse është delikat dhe shkakton bug-e reale në production. Të dish se singleton-et duhet të jenë stateless dhe thread-safe (ata ndahen nëpër të gjitha thread-et e kërkesave) është përfundimi praktik që intervistuesit presin të dëgjojnë.
Një bibliotekë pyetjesh intervistash IT me përgjigje të detajuara — nga Junior te Senior.
Dhuro