Egy bean scope azt szabályozza, hány példányt hoz létre a container, és azok meddig élnek. Az életciklus-callbackek lehetővé teszik, hogy közvetlenül egy bean megkonstruálása után és éppen a megsemmisítése előtt futtass kódot.
Egy bean scope azt szabályozza, hány példányt hoz létre a container, és azok meddig élnek. Az életciklus-callbackek lehetővé teszik, hogy közvetlenül egy bean megkonstruálása után és éppen a megsemmisítése előtt futtass kódot.
@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 { }
A klasszikus csapda: egy prototype injektálása egy singletonba. A singleton egyszer kötődik be, így örökre egyetlen prototype példányt tart meg — a „minden alkalommal új" ígéret megtörik. Javítsd @Lookup-pal, egy ObjectProvider<ReportBuilder>-rel vagy scoped-proxyval.
@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 */ }
}
Fontos: a Spring nem hívja meg a @PreDestroy-t a prototype beaneken — átadja őket, és abbahagyja a követésüket, így te felelsz a takarításukért.
Ez választja el azokat, akik varázslatként kezelik a Springet, azoktól, akik értik a containert. A singletont-tartó-prototype hiba kedvenc interjúszcenárió, mert finom, és valódi éles hibákat okoz. Annak tudata, hogy a singletonoknak stateless-nek és thread-safe-nek kell lenniük (mivel minden kérés-szál között megosztottak), a gyakorlati tanulság, amelyre az interjúztatók figyelnek.
IT interjúkérdések gyűjteménye részletes válaszokkal — Juniortól Seniorig.
Adományozás