Конфигурация пружины - PullRequest
16 голосов
/ 08 июня 2011

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

Ответы [ 5 ]

10 голосов
/ 09 июня 2011

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

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

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

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

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

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

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

А что это за контейнер IoC?

IoC (инверсия управления) и DI (внедрение зависимостей) - это термины, введенные Martin Fowler , относительно Spring см. первый раздел документов .

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

8 голосов
/ 01 августа 2011

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

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

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

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

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

Я нахожу файл applicationContext.xml в каталоге classpath:/META-INF/spring и файл webmvc-config.xml в WEB-INF/spring. Это место в стиле Spring Roo. Это работает, но любая другая папка тоже будет работать. Поскольку я использую 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 - с помощью сервлета Dispatacher. 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>

Теперь вы начинаете писать свои тесты для бизнес-логики вашего приложения без загрузки всего веб-контента. Но в большинстве случаев это не достаточно. Например, вы хотите запустить несколько быстрых тестов с базой данных Inmemory, в то время как вы запускаете обычное приложение с постоянной базой данных, такой как MySql (, пожалуйста, не вините меня за это предложение ), или вы хотите использовать jndi настроил БД в производстве и "нормальный" настроил для тестов. Так что вам нужно две разные конфигурации. Чтобы написать не все дважды, проще всего разбить applicationContext.xml на два файла:

  • applicationContext.xml для ядра без дБ, что отличается от тестов
  • applicationContext-db.xml для производительной конфигурации БД (например, jndi-lookup для соединения БД и 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

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

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

2 голосов
/ 01 августа 2011

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

0 голосов
/ 29 июля 2011

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

В веб-приложении это обычно настраивается в Интернете.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-value, разделяя их пробелами.

0 голосов
/ 08 июня 2011

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

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

src/main/resources

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

В разделе 3.2.2 Spring docs показано, как создать экземпляр ApplicationContext.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...