2008-11-17 2 views
5

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

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

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

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

Failed to import bean definitions from URL location [classpath:com/config/resources.xml]

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

ответ

10

Если это должно быть в пути к классу вашего веб-приложения, вы должны вставить 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()); 
0

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

+0

Я думаю, вы имеете в виду следующее: http://static.springframework.org/spring/docs/2.5.x/reference/resources.html#resources-classpath-wildcards – 2008-11-17 19:11:51

0

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

1

Я столкнулся с аналогичной проблемой с плагином 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); 
} 

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

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