2013-10-27 4 views
16

Мои коллеги очень часто используют слово «контекст приложения». Во многих статьях это коллокация использовалась очень часто.контекст приложения. Что это?

Мое настоящее понимание: контекст приложения - это один xml-файл.

Но я понимаю, что если бы я был прав, люди не использовали бы «контекст приложения» вместо конфигурационного xml-файла.

Можете ли вы помочь мне решить эту проблему?

+0

У меня нет возможности сделать это – homeAccount

+0

@Shamse Я думаю, что homeAccount тоже понял это. Почему бы не ответить на вопрос, а появилось новое? – ozanmuyes

ответ

19

@feak дает прямой ответ о значении ApplicationContext с точки зрения Spri нг. Короче говоря, это контекст, который загружает конфигурацию (обычно XML-файл), а затем Spring начнет управлять бобы и его преимуществом:

  • Фасолью, объявленным в пакете
  • Фасоли провозглашенной аннотаций (если эта конфигурация включен)
  • Bean и метод автоматического связывания
  • Bean инъекции
  • Конфигурация .properties загрузки файлов
  • и т.д.

Для запуска контекста приложения, вы можете использовать один из следующих вариантов:

  • вручную загрузить контекст приложения в начале вашего приложения. Это делается для целей образца или в отдельных приложениях:

    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 с в одном приложении.Из последнего примера в консольном приложении, это легко проверить:

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. Ты можешь сделать это? Да, вы на самом деле видите это здесь. В чем же разница? главного отличие состоит в том, что весна бобы одноэлементных прицелы одноточечно в контексте приложения, это значит при извлечении Bar боба, который настроен в applicationContext.xml файл из contextне будет один и тем же как извлечение его из context2, но несколько извлекает из context будет возвращать тот же самый экземпляр bean Bar.

Считается ли это хорошей или плохой практикой? Ни, это будет зависеть от проблемы, которая будет решена (в случае последнего примера я бы сказал, что это плохой практики). Большинство людей рекомендуют иметь все ваши компоненты в одном месте (через XML или другое) и загружаться одним контекстом приложения.

+0

Можете ли вы объяснить различия между одним контекстом приложения и одиночным файлом xml – homeAccount

+0

@homeAccount Что вы не понимаете? Файл XML определяет конфигурацию, контекст приложения загружает конфигурацию из этого файла, а Spring запускает обработку определенных вами компонентов. –

+0

В одном контексте может использоваться много файлов xml. Как? Я не понимаю, когда я использую много контекстов, и когда я использую один контекст – homeAccount

1

Я предполагаю, что вы коллеги означают загруженный контекст весной приложения, что позволяет получить доступ к:

  • конфигурации приложения,
  • инициализированы бобов,
  • событий приложений API,
  • и т.д.
+0

, которые отличаются между файлом xml и «контекстом приложения» – homeAccount

+0

Контекст приложения и весенний XML-файл - это разные термины. Один контекст приложения может быть инициализирован с использованием одного, двух и более файлов xml. Кроме того, для инициализации можно использовать контекст приложения/@ Классы конфигурации без XML-файлов. Итак, я хочу сказать, что xml и/@ Configuration - это подход к настройке контекста. – kemenov

+0

ОК. Что это значит, когда я слышу «разные контексты»? – homeAccount

Смежные вопросы