конфигурация весенних бобов - PullRequest
5 голосов
/ 17 ноября 2008

Я использую инъекцию зависимостей Spring, но у меня возникают трудности с загрузкой ресурса в моем конфигурационном файле Spring.

Ресурс представляет собой файл XML и находится в файле JAR на моем пути к классам. Я пытаюсь получить к нему доступ следующим образом:

<import resource="classpath:com/config/resources.xml" />

однако я продолжаю сталкиваться со следующей ошибкой:

Не удалось импортировать определения bean-компонентов из расположения URL [classpath: com / config / resources.xml]

Файл JAR находится в classpath проекта Java, который, в свою очередь, используется моим веб-приложением. Должен ли я действительно выполнять настройку Spring в веб-проекте, а не в Java-проекте, или это имеет значение?

Ответы [ 4 ]

10 голосов
/ 17 ноября 2008

Если он должен находиться в пути к классу вашего веб-приложения, вам следует вставить JAR-файл, содержащий файл конфигурации, в каталог WEB-INF / lib.

Если вы используете веб-приложение, то общепринятым условием является использование ContextLoaderListener для обеспечения вставки WebApplicationContext в стандартное место в ServletContext:

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:/com/config/resources.xml</param-value>
</context-param>

Затем используйте WebApplicationContextUtils , чтобы вытащить контекст приложения из контекста сервлета, используя:

WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
1 голос
/ 19 марта 2010

Я столкнулся с подобной проблемой с плагином red5. Я решил это так:

try {
  subContext = new FileSystemXmlApplicationContext(new String[] { "classpath*:/myconfig.xml" }, true, context);
} catch (Exception fnfe) {
  subContext = new FileSystemXmlApplicationContext(new String[] { "plugins/myconfig.xml" }, true, context);
}

Сначала это будет выглядеть в любом месте на пути к классам, в том числе в банке с моим кодом Если происходит исключение, проверяется каталог плагинов. Возможно, это не лучшее решение, но оно работает.

0 голосов
/ 18 ноября 2008

Я использовал только директиву <import> в J2SE, и она работает без префикса classpath:, просто как <import resource="config/resources.xml" />. Но в J2EE, если все ваши файлы находятся внутри WEB-INF, он должен быть похожим, просто импортируйте resource = "bla.xml", и он должен его найти, хотя в J2EE вам не нужно это делать, потому что в web.xml вы Можно определить несколько файлов в параметре контекста contextConfigLocation внутри web.xml, просто разделив их пробелами или символами новой строки.

0 голосов
/ 17 ноября 2008

Я действительно не помню, почему это важно, но попробуйте поставить звездочку () перед двоеточием (:) classpath : / Если это не сработает, попробуйте звездочку после двоеточия (classpath: *), хотя я думаю, что это было до двоеточия.

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