En bean-scope styr hur många instanser containern skapar och hur länge de lever. Lifecycle-callbacks låter dig köra kod direkt efter att en bean konstruerats och strax innan den förstörs.
En bean-scope styr hur många instanser containern skapar och hur länge de lever. Lifecycle-callbacks låter dig köra kod direkt efter att en bean konstruerats och strax innan den förstörs.
@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 { }
Den klassiska fällan: att injicera en prototype i en singleton. Singletonen kopplas en gång, så den behåller en enda prototype-instans för alltid — löftet om "ny varje gång" bryts. Åtgärda det med @Lookup, en ObjectProvider<ReportBuilder>, eller 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 */ }
}
Viktigt: Spring anropar inte @PreDestroy på prototype-beans — den lämnar över dem och slutar spåra dem, så du ansvarar för deras uppstädning.
Detta skiljer dem som behandlar Spring som magi från dem som förstår containern. Buggen med en singleton som håller en prototype är ett favoritscenario i intervjuer eftersom den är subtil och orsakar verkliga produktionsbuggar. Att veta att singletons måste vara tillståndslösa och trådsäkra (de delas mellan alla förfrågningstrådar) är den praktiska lärdomen som intervjuare lyssnar efter.
Ett bibliotek med IT-intervjufrågor och detaljerade svar — från Junior till Senior.
Donera