7 votes

Lequel est chargé en premier? bloc statique ou bean spring?

Je suis en train d'autowirer un objet avec spring et j'appelle une méthode en utilisant le même objet autowired. Il lance une NullPointerException. Le problème est que j'appelle la méthode à l'intérieur d'un bloc statique. Voici mon code -

@Autowired
static MyPropertyManagerClass myPropertyManagerClass;

private static URL SERVICE_URL = null;

static {
    try {
        SERVICE_URL = myPropertyManagerClass.getServiceURL();
    }
    catch (Exception e) {
        log.error("Exception occurred while invoking myPropertyManagerClass.getServiceURL() : " , e);
    }
}

Si je ne me trompe pas, cela se produit parce que le bloc statique est chargé en premier. Y a-t-il un moyen de faire fonctionner cela sans créer un objet avec le mot-clé new ?

5voto

Anonymous Points 40

Le bloc static sera toujours traité avant l'injection de Spring. Comme suggéré par @TheLostMind, "Utilisez @PostConstruct et placez votre code ici". Si vous voulez éviter le new, vous pouvez utiliser la factory-method de Spring dans votre fichier XML.

5voto

TheLostMind Points 10813

blocs statiques sont invoqués lorsque la classe est initialisée, après avoir été chargée. Les dépendances de votre composant n'ont pas encore été initialisées. C'est pourquoi vous obtenez une NullPointerException (Vos dépendances sont nulles).

Déplacez votre code dans une méthode annotée avec @PostConstruct. Cela garantira que votre code s'exécutera lorsque toutes les dépendances de votre composant seront initialisées.

2voto

Le statique serait en premier. Les beans Spring seraient initialisés après le niveau d'initialisation de BeanPostProcessor.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X