контекст приложения. Что это?

мои коллеги очень часто используют слово "контекст". Во многих статьях это словосочетание используется очень часто.

мое текущее понимание: контекст приложения-это один 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 или нет). Период.


после понимания этого вы также можете понять, что у вас может быть более одного контекста приложения для каждого приложения. Это, имея два или более ApplicationContexts в то же самое приложение. Из последнего примера в консольном приложении, это легко проверить:

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