J'ai le morceau de code suivant dans mon programme et j'utilise SonarQube 5 pour vérifier la qualité du code après l'avoir intégré à Maven.
Cependant, Sonar demande de rendre la méthode de fermeture "statique" ou de supprimer cet ensemble. la méthode est setApplicationContext.
Comment supprimer cette erreur? Pourquoi cette erreur arrive?
public class SharedContext implements ApplicationContextAware {
public static final String REPORT_ENGINE_FACTORY = "reportEngineFactory";
private static ApplicationContext applicationContext;
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
SharedContext.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
public Object getBean(String name) {
return applicationContext.getBean(name);
} }
Pour être précis, vous semblez demander la règle S2696, "Les méthodes d'instance ne doivent pas écrire dans des champs" statiques ""
Comme le précise la description de la règle:
La mise à jour correcte d'un champ
static
à partir d'une méthode non statique est difficile à obtenir et pourrait facilement conduire à des bogues s'il y a plusieurs instances de classe et/ou plusieurs threads en jeu. Idéalement, les champsstatic
ne sont mis à jour qu'à partir desynchronized static
méthodes.
Ainsi, le problème vous dit de faire la méthode sur laquelle il a été déclenché (vraisemblablement setApplicationContext
) static
, de sorte que dans toutes les instances de classe, il n'y ait qu'une seule copie de cette méthode pour mettre à jour le static
(c'est-à-dire partagé entre toutes les instances de classe) champ applicationContext
. Il recommande en outre de créer la méthode synchronized
afin qu'une seule instance à la fois puisse appeler la méthode.