контекст приложения. Что это?
мои коллеги очень часто используют слово "контекст". Во многих статьях это словосочетание используется очень часто.
мое текущее понимание: контекст приложения-это один XML-файл.
но я понимаю, что если бы я был прав, люди не использовали бы "контекст приложения" вместо файла конфигурации xml.
можете ли вы помочь мне справиться с этой проблемой?
2 ответов
@feak дает прямой ответ о значении ApplicationContext
С точки зрения весны. Короче говоря, это контекст, который загружает конфигурацию (обычно XML-файл), а затем Spring начнет управлять бобами и его преимуществами:
- фасоль объявлена в упаковке
- бобы, объявленные аннотациями (если эта конфигурация включена)
- Боб и метод autowiring
- Бин инъекция
- конфигурации .загрузка файла свойств
- etc
чтобы запустить контекст приложения, вы можете использовать один из следующих:
-
вручную загрузите контекст приложения в начале приложения. Это делается для выборочных целей или в автономных приложениях:
public class Foo { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("path/to/applicationContext.xml"); //use the context as you wish... } }
в случае веб-приложений Java, использующих Spring MVC,
DispatchServlet
загрузит контекст приложения для вас, поэтому вам нужно только создать springapp-сервлет.в XML файл в папке WEB-INF приложения.
отметим, что контекст приложения связан с одной конфигурацией (на основе XML или нет). Период.
после понимания этого вы также можете понять, что у вас может быть более одного контекста приложения для каждого приложения. Это, имея два или более ApplicationContext
s в то же самое приложение. Из последнего примера в консольном приложении, это легко проверить:
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...
}
}
обратите внимание, что у нас есть два контекста приложений, использующих одну и ту же конфигурацию XML. Ты можешь это сделать? Да, вы действительно видите это здесь. Тогда какая разница? The main разница в том, что Spring beans singleton scopes-это синглтон в контексте приложения, это означает при получении Bar
bean, настроенный в applicationContext.XML файл context
не будет то же самое как извлечь его из context2
, но несколько извлекает из context
вернет то же самое Bar
экземпляр bean.
это считается хорошей или плохой практикой? ни, это будет зависеть от проблемы, которую необходимо решить (в случае последнего примера, я бы сказал, что это плохо практика). Большинство людей рекомендовали бы иметь все ваши бобы, настроенные в одном месте (через XML или другой) и загруженные контекст одного приложения.
Я думаю, что вы, коллеги, имели в виду загруженный контекст приложения spring, который позволяет получить доступ к:
- настройки приложения
- инициализируется бобы,
- api событий приложений,
- etc