Opseg beana (scope) kontrolira koliko instanci kontejner stvara i koliko dugo one žive. Lifecycle callbackovi omogućuju vam pokretanje koda odmah nakon što je bean konstruiran i neposredno prije nego se uništi.
Opseg beana (scope) kontrolira koliko instanci kontejner stvara i koliko dugo one žive. Lifecycle callbackovi omogućuju vam pokretanje koda odmah nakon što je bean konstruiran i neposredno prije nego se uništi.
@Service // singleton po zadanom — jedan zajednički OrderService za cijelu aplikaciju
public class OrderService { }
@Component
@Scope("prototype") // nova instanca pri svakom getBean/inject
public class ReportBuilder { }
Klasična zamka: injektiranje prototypea u singleton. Singleton se poveže jednom, pa zauvijek zadržava jednu prototype instancu — obećanje "novo svaki put" se lomi. Riješite to s @Lookup, ObjectProvider<ReportBuilder> ili scoped-proxyjem.
@Component
public class ConnectionPool {
@PostConstruct // pokreće se nakon injektiranja ovisnosti, prije uporabe
public void open() { /* otvori sockete, zagrij cacheove */ }
@PreDestroy // pokreće se pri urednom gašenju kontejnera (samo singletoni)
public void close { }
}
Važno: Spring ne poziva @PreDestroy na prototype beanovima — predaje ih i prestaje ih pratiti, pa je čišćenje na vama.
Ovo razdvaja one koji Spring tretiraju kao magiju od onih koji razumiju kontejner. Bug u kojem singleton drži prototype omiljeni je scenarij na razgovorima jer je suptilan i uzrokuje stvarne produkcijske bugove. Znanje da singletoni moraju biti bez stanja i thread-safe (dijele se među svim nitima zahtjeva) praktični je zaključak koji ispitivači žele čuti.
Knjižnica IT pitanja za razgovore za posao s detaljnim odgovorima — od Juniora do Seniora.
Doniraj