Stavo cercando il modo idiomatico per implementare l'inizializzazione pigra thread-safe per una collezione di configurazione recuperata dal DB all'interno di un bean Spring.
Ho deciso di adattare il modello di supporto per l'inizializzazione su richiesta come segue:
public class Security {
private static ParametersDao DAO;
/**
* Initialisation-on-demand Holder pattern
*/
private static class StaticHolder {
public static final Set<String> VALID_EMAIL_ADDRESSES;
static {
VALID_EMAIL_ADDRESSES = DAO.loadEmailAddresses();
}
}
private ParametersDao parametersDao;
public void setParametersDao(ParametersDao parametersDao) {
this.parametersDao = parametersDao;
}
public Set<String> getValidEmails() {
if (parametersDao == null) throw TooSoonException();
DAO = parametersDao;
return StaticHolder.VALID_EMAIL_ADDRESSES;
}
}
Quali sono i problemi a cui prestare attenzione per adattare questo approccio in questo modo, a parte il problema di temporizzazione tra l'esigenza di utilizzare gli indirizzi email validi e l'inizializzazione del contenitore IoC?