contexte d'application. Qu'est-ce que c'est?
Mes collègues utilisent très souvent Word "contexte d'application". Dans de nombreux articles, cette collocation est également utilisée très souvent.
Ma compréhension actuelle: le contexte d'application est un fichier xml unique.
Mais je comprends que si j'avais raison, les gens n'utiliseraient pas le "contexte d'application" au lieu du fichier xml de configuration.
Pouvez-vous m'aider à résoudre ce problème?
@feak donne une réponse directe sur la signification de ApplicationContext
en termes de printemps. En bref, c'est un objet qui charge la configuration (généralement un fichier XML basé sur les annotations), puis Spring commencera à gérer les beans et ses avantages:
- Haricots déclarés dans le paquet
- Haricots déclarés par annotations
- Constructeur et méthode de câblage automatique
- Injection de haricots
- Configuration, chargement des fichiers .properties et .yaml
- etc
Pour démarrer un contexte d'application, vous pouvez utiliser l'un des éléments suivants:
Chargez manuellement le contexte de l'application au début de votre application. Cela se fait à des fins d'exemple ou dans des applications autonomes:
public class Foo { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("path/to/applicationContext.xml"); //use the context as you wish... } }
Dans le cas de Java applications Web utilisant Spring MVC, le
DispatchServlet
chargera le contexte de l'application pour vous, vous n'avez donc qu'à créer un springapp-servlet.xml fichier dans le dossier WEB-INF de l'application.
Notez que un contexte d'application est associé à une configuration unique (basée sur XML ou non). Période.
Après avoir compris cela, vous pouvez également comprendre que vous pouvez avoir plus d'un contexte d'application unique par application. C'est-à-dire, avoir deux ApplicationContext
ou plus dans la même application. À partir du dernier exemple de l'application console, cela est facile à vérifier:
public class Foo {
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("path/to/applicationContext.xml");
ApplicationContext context2 =
new ClassPathXmlApplicationContext("path/to/applicationContext.xml");
//use the context as you wish...
}
}
Notez que nous avons deux contextes d'application utilisant la même configuration XML. Pouvez-vous faire cela? Oui, vous le voyez réellement ici. Quelle est donc la différence? La principale différence est que les portées singleton des beans Spring sont singleton par contexte d'application , cela signifie que lors de la récupération d'un bean Bar
configuré dans le fichier applicationContext.xml à partir de context
ne sera pas le même comme le récupérer à partir de context2
, mais plusieurs récupérations de context
renverront la même instance de bean Bar
.
Est-ce considéré comme une bonne ou une mauvaise pratique? Ni , cela dépendra du problème à résoudre (dans le cas du dernier exemple, je dirais que c'est un mauvaise pratique). La plupart des gens recommandent d'avoir tous vos beans configurés en un seul endroit (via XML ou autre) et chargés par un seul contexte d'application.
Je suppose que vous, collègues, vouliez parler du contexte de l'application Spring chargée, qui permet d'accéder à:
- configuration de l'application,
- haricots initialisés,
- api d'événements d'application,
- etc