En bean-scope styrer hvor mange instanser containeren lager og hvor lenge de lever. Livssyklus-callbackene lar deg kjøre kode rett etter at en bean er konstruert og rett før den destrueres.
En bean-scope styrer hvor mange instanser containeren lager og hvor lenge de lever. Livssyklus-callbackene lar deg kjøre kode rett etter at en bean er konstruert og rett før den destrueres.
@Service // singleton som standard — én delt OrderService for hele appen
public class OrderService { }
@Component
@Scope("prototype") // ny instans ved hvert getBean/inject
public class ReportBuilder { }
Den klassiske fellen: å injisere en prototype inn i en singleton. Singletonen kobles sammen én gang, så den beholder én enkelt prototype-instans for alltid — løftet om "ny hver gang" brytes. Fiks det med @Lookup, en ObjectProvider<ReportBuilder> eller scoped-proxy.
@Component
public class ConnectionPool {
@PostConstruct // kjører etter at avhengigheter er injisert, før bruk
public void open() { /* åpne sockets, varm opp cacher */ }
@PreDestroy // kjører ved ryddig nedstenging av containeren (kun singletons)
public void close() { /* frigjør ressurser */ }
}
Viktig: Spring kaller ikke @PreDestroy på prototype-beans — den gir dem fra seg og slutter å spore dem, så du eier oppryddingen deres.
Dette skiller de som behandler Spring som magi fra de som forstår containeren. Bugen der en singleton holder på en prototype er et favorittscenario i intervjuer fordi den er subtil og forårsaker reelle produksjonsbugs. Å vite at singletons må være tilstandsløse og trådsikre (de deles på tvers av alle forespørselstråder) er den praktiske lærdommen intervjuere lytter etter.
Et bibliotek av IT-intervjuspørsmål med detaljerte svar — fra Junior til Senior.
Doner