2010-11-22 3 views
1

Hey, comment traiter les initialisations statiques au printemps? Je veux dire, mon haricot a une initialisation statiqueInitialisation statique d'un haricot

private static final Map<String, String> exceptionMapping = ErrorExceptionMapping.getExceptionMapping(); 

et je dois veiller à ce que ErrorExceptionMapping est chargé avant. J'ai essayé ceci:

<bean id="errorExceptionMapping" class="cz.instance.transl.util.ErrorExceptionMapping" /> 
<bean id="validateService" class="cz.instance.transl.services.ValidateService" depends-on="errorExceptionMapping" > 

Mais je suis

java.lang.NoClassDefFoundError: Could not initialize class cz.instance.transl.util.ErrorExceptionMapping 

Si je laisse de côté l'initialisation statique ou appelez la méthode à partir de la méthode de la fève, bien sûr son bien. Je suppose que le rappel d'initialisation (affterPropertiesSet()) n'aiderait pas ici.

Répondre

4

Avoir static dépendances sur d'autres haricots n'est pas une manière de printemps. Toutefois, si vous souhaitez le conserver static, vous pouvez l'initialiser paresseusement. Dans ce cas, depends-on peut appliquer l'ordre d'initialisation approprié.

EDIT: En chargeant paresseux je veux dire quelque chose comme ça (j'utilise l'initialisation paresseuse avec langage de classe titulaire ici, d'autres idiomes d'initialisation paresseux peuvent être utilisés à la place):

private static class ExceptionMappingHolder { 
    private static final Map<String, String> exceptionMapping = 
     ErrorExceptionMapping.getExceptionMapping(); 
} 

et utiliser ExceptionMappingHolder.exceptionMapping au lieu de exceptionMapping .

+0

J'ai essayé, regardez le code collé au milieu, mais ça me donne NoClassDefFoundError pour la classe. Dans cette classe il y a des tonnes d'autres classes que je devrais déclarer ... – lisak

+0

@lisak: Mis à jour. – axtavt

3

Vous devriez pouvoir marquer la classe avec l'annotation @Component, puis ajouter un paramètre non statique avec l'annotation @Autowired(required=true) pour définir la variable statique.

Here's a link pour plus d'informations.

+1

Je suppose que cela fonctionnerait, mais j'initialise un HashMap, donc c'est compliqué. Je ferais mieux de refactoring et de le faire au printemps, c'est singleton quand même, merci – lisak

Questions connexes