Конфигурация Пружины

#xml #spring

Вопрос:

Я читал о Spring, и в нем постоянно говорится о необходимых вам данных конфигурации spring, но куда вы помещаете этот xml-файл? и как вы его сохраняете? Кажется, я нигде не могу найти эту информацию.

Комментарии:

1. Вы используете Spring внутри чего-то вроде Tomcat или создаете автономное приложение? Как запускается ваше приложение?

2. эти учебные пособия полезны при изучении spring krams915.blogspot.com/p/tutorials.html

Ответ №1:

Более важно, чем где, для вас должен быть вопрос: что именно это за «данные конфигурации»?

Из документов:

контейнер Spring IoC использует форму метаданных конфигурации; эти метаданные конфигурации представляют, как вы, разработчик приложения, указываете контейнеру Spring создавать экземпляры, настраивать и собирать объекты в вашем приложении.

Метаданные конфигурации традиционно предоставляются в простом и интуитивно понятном формате XML, который используется в большинстве разделов этой главы для передачи ключевых концепций и функций контейнера Spring IoC.

Однако вы также можете использовать аннотации или конфигурацию на основе Java для предоставления метаданных конфигурации для ваших POJO.

Весной объекты, которые составляют основу вашего приложения и управляются контейнером Spring IoC, называются компонентами. Компонент-это объект, который создается, собирается и иным образом управляется контейнером Spring IoC. В противном случае компонент-это просто один из многих объектов в вашем приложении. Компоненты и зависимости между ними отражены в метаданных конфигурации, используемых контейнером.

Как уже упоминалось в Tnem, здесь вы можете найти, как создать экземпляр контейнера в различных сценариях.

И что это за контейнер МоК?

IoC (инверсия контроля) и DI (инъекция зависимостей) — термины, придуманные Мартином Фаулером, относительно весны см. Первый раздел документов.

Я призываю вас прочитать всю справку, если вы хотите приступить к разработке с помощью Spring.

Комментарии:

1. Мне также довольно сложно найти ссылку на имена файлов конфигурации в веб-приложении spring. Ссылка продолжает говорить о содержимом файла «бобов», но ни слова о его названии. Читая вокруг, я обнаружил, что у него есть поведение CoC: сначала он ищет файл с именем applicationContext.xml. Затем он заглядывает в web.xml параметры контекста. При поиске по ссылке слово «CoC» никогда не упоминается. Я хотел бы дать окончательный ответ на эту тему.

2. @AgostinoX: Имя XML — файла не важно-важно содержимое. Spring позволяет Вам называть файлы конфигурации так, как вам удобно, — вот почему имена файлов конфигурации никогда не упоминаются в документах. В целом я согласен с @abalogh в том, что сначала Вы должны решить how Вы хотите настроить его, а затем where поместить метаданные конфигурации. Это applicationContext.xml просто имя файла конфигурации по умолчанию, если вы не передаете никаких пользовательских файлов, но это не значит, что вы должны использовать это имя.

3. @AgostinoX: Если Вы ищете лучшие практики в именовании и размещении файлов конфигурации spring — ну, я не знаю, есть ли они, и если да, то ИМХО, этот вопрос не требует этого. Недавно я обнаружил, что для OSGi местоположение пути к классу является местоположением META-INF/spring/*.xml по умолчанию. Мне это понравилось, и я тоже начал использовать его в своих приложениях, отличных от OSGi. Я также использую соглашения об именах, чтобы легко разделить мои файлы конфигурации на группы с помощью выражений (т. Е. META-INF/spring/*-context.xml , META-INF/spring/*-webcontext.xml , META-INF/spring/*-testcontext.xml ).

4. @Roadrunner: к сожалению, вопрос здесь как раз в имени файла. Я очень хорошо знаю содержание, потому что прочитал все справочные и другие книги о содержании, но мне тоже нужно немного ясности в названии.

5. @AgostinoX: имя и расположение ваших файлов конфигурации полностью зависят от вас.

Ответ №2:

Более интересным, чем чистое имя, является то, как вы разделяете файлы (и даете каждой части имя).

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

Предположим, у вас есть веб-приложение с тестами.

Затем вы должны разделить конфигурацию на два файла: один для чистой конфигурации java (без веб-интерфейса) и один, содержащий все остальное для веб-приложения.

Я лично лучше назову это applicationContext.xml и webmvc-config.xml. Имя файла веб-конфигурации по умолчанию (если для сервлета диспетчера не указано) будет /WEB-INF/<servletname>-servlet.xml )

Я нахожу applicationContext.xml в classpath:/META-INF/spring справочнике и в WEB-INF/spring webmvc-config.xml в. Это место в стиле Спринг-Ру. Это работает, но любая другая папка тоже будет работать. Поскольку я использую maven, точное расположение файлов:

  • /src/main/resources/META-INF/spring/applicationContext.xml
  • /src/main/webapp/WEB-INF/spring/webmvc-config.xml

Ядро applicationContext.xml загружается с org.springframework.web.context.ContextLoaderListener помощью , и webmvc-config.xml сервлетом Диспетчера. web.xml :

 <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:META-INF/spring/applicationContext*.xml</param-value>
</context-param>

<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>CFMA-SpringProject</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/webmvc-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
 

Теперь вы начинаете писать свои тесты для бизнес-логики вашего приложения, не загружая все веб-материалы. Но в большинстве случаев этого недостаточно. Например, вы хотите выполнить несколько быстрых тестов с базой данных памяти, в то время как вы запускаете обычное приложение с постоянной базой данных, такой как MySQL (пожалуйста, не вините меня за это предложение), или вы хотите использовать базу данных, настроенную jndi, в рабочей среде и «обычную», настроенную для тестов. Итак, вам нужны две разные конфигурации. Чтобы написать не все дважды, самый простой способ-разделить файл applicationContext.xml на два файла:

  • applicationContext.xml для основного материала без материала бд, который отличается от тестов
  • applicationContext-db.xml для продуктивной конфигурации бд (например, jndi-поиск подключения к БД и LocalContainerEntityManagerFactoryBean для MySQL)

(Теперь вы понимаете закономерность contextConfigLocation в web.xml)

Для тестов вам теперь нужны два файла (вы можете записать их в один файл, но я предпочитаю два). * testContext-h2DbConfig.xml Файл , являющийся родственным файлом для тестирования applicationContext-db.xml , но с тестовой базой данных и без jndi. * textContext.xml Этот файл в том файле, на который ссылается @ContextConfiguration в ваших тестовых случаях. Этот файл содержит только импорт конфигурации, необходимой для тестов. В данном случае это:

 <import resource="classpath:/META-INF/spring/applicationContext.xml" /> 
<import resource="classpath:/META-INF/spring/testContext-h2DbConfig.xml" />
 

Поскольку я использую spring, оба файла находятся в /src/test/resources/META-INF/spring/testContext.xml

Если у вас есть другие аспекты конфигурации spring, в которых тестовая и производительная конфигурации отличаются (например, планировщики), вы можете разделить их таким же образом.

Я надеюсь, вы понимаете, как разделение, соглашение об именах и расположение работают вместе.

Ответ №3:

Ну, если вообще есть «официальное» название, то, я думаю, оно должно исходить от самих весенних парней. И инструмент выбора Spring для настройки соответствующих проектов Spring-это Roo, который мы находим там SRC_MAIN_RESOURCES/META-INF/spring/applicationContext.xml ( SRC_MAIN_RESOURCES будучи заполнителем src/main/resources в проекте Maven2).

Комментарии:

1. 1 за то, что сказали мне, куда поместить applicationContext.xml файл в отдельное приложение с помощью Maven!

Ответ №4:

Это зависит от вашего приложения, некоторые приложения поддерживают конфигурацию Spring, в этом случае вам нужно будет проверить документацию по фреймворкам.

Если это автономное приложение, то вы можете поместить файл в любое место, но обычно он помещается в

 src/main/resources
 

или подкаталог в resources .

Раздел 3.2.2 документов Spring показывает, как создать экземпляр ApplicationContext .

Комментарии:

1. src/main/resources предназначен только для проектов, построенных maven

2. @aseychell Да, верно, вау, я так укоренился в своих способах maven 😀

Ответ №5:

Как указывали другие, имя файла конфигурации Spring не очень важно. Реальный вопрос заключается в том, как загружается этот файл. В автономном приложении вы делаете это явно, используя что-то вроде класса ClassPathXmlApplicationContext, как описано в этой части документации Spring.

В веб-приложении это обычно настраивается в web.xml файл, добавив определения для прослушивателей конфигурации и, возможно, файлы конфигурации. Это настройка, которую я использую:

 <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:appContext.xml</param-value>
    </context-param>
<listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>
 

Это позволяет мне поместить файл конфигурации в любое удобное для меня место, если он находится в пути к классам приложения. Вы даже можете указать несколько файлов конфигурации в элементе param-значение, разделив их пробелами.