#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
предназначен только для проектов, построенных maven2. @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-значение, разделив их пробелами.