Mam taką niezrozumiałą sytuację w Spring IoC i SpringMVC
Napisałem klasę która służy mi za pseudo konfigurację działającą tylko w pamięci programu:
@Component
@Qualifier("conf")
@Scope(value=WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
public class RuntimeConfiguration{
Klasę tę wstrzykuję w kontrolerze, gdzie ją 'wypełniam' parametrami.
Następnie klasa ta jest pobierana gdzieś w logice aplikacji za pomocą adnotacji @Autowired, ale musi być to sama instancja jak w kontrolerze (ze względu na parametry które chciałbym pobrać):
@Autowired
@Qualifier("conf")
RuntimeConfiguration conf;
Wcześniej próbowałem uzyskać bezpośrednio dostęp do pola zmiennej "conf" z powyższego kodu źródłowego w taki sposób:
this.durationTime.set(Integer.parseInt(conf.args.get(RuntimeConfiguration.ARGS_TIME_LIMIT)[0]));
I Proxy zastępujące klasę RuntimeConfiguration wyrzucało NullPointerException o_O.
Teraz zmieniłem to na:
this.durationTime.set(Integer.parseInt(conf.getTimeLimit()));
/// czyli:
public int getTimeLimit(){
return (int) args.get(RuntimeConfiguration.ARGS_TIME_LIMIT);
}
.. i działa.
Może mi ktoś to wytłumaczyć?
Bardzo mnie to zastanawia.
Pozdrawiam i przepraszam za skąpy kod źródłowy.