2013-04-08 3 views
2

Весна и Спящий стек.В чем разница? Задание файла в контексте-param vs с использованием импорта?

Я вижу, что мы можем указать несколько файлов в файле web.xml под тегом <context-param>.

<context-param> 
<param-name>contextConfigLocation</param-name> 
<param-value>/WEB-INF/appcontext.xml, hibernateconfig.xml</param-value> 
</context-param> 

Мы также можем загрузить конфигурационные файлы из appcontext.xml файла, а также:

appcontext.xml: 

<import resource="hibernateconfig.xml"/> 

Какая разница, или эти две совершенно разные?

Спасибо!

ответ

1

Это для гибкости.

Что бы вы сделали, если вам нужно было использовать несколько файлов конфигурации пружин, ни один из которых вы не контролировали?

  1. В вашем web.xml, вы можете указать оба файла, как и в первом примере, так как вы не смогли бы добавить import элемент либо одного из них.
  2. Вы можете создать новый файл, который import 'ed оба из них.

Любой из них будет работать, поскольку гибкость - это то, к чему стремилась Весна.

Для справки, вот некоторая документация для каждой части: import element, contextConfigLocation

Хотя они оба используются для точно то же самое, что кажется, что contextConfigLocation поддерживает Ant-Style сопоставления с образцом, в котором элемент импорта может нет.

+0

Значит, никакой другой разницы? –

+0

Я добавил немного больше информации. Существуют различия в их возможностях, но в функции они одинаковы. –

2

Помимо гибкости одно существенное отличие, которое я заметил в нашем предыдущем проекте, заключается в том, что если ваши файлы контекста зависят друг от друга, это может вызвать проблемы. Скажем, в вашем файле appcontext.xml вы импортируете определения bean для некоторых классов DAO, и это в свою очередь зависит от hibernateconfig.xml. Если вы даете такую ​​запись

<param-value>/WEB-INF/appcontext.xml, hibernateconfig.xml</param-value> 

в web.xml, то бобы DAO будут загружаться с вне SessionFactory (от hibernateconfig) вводят в него. Иногда это может вызывать HibernateExceptions. В этом случае то, что вы можете сделать, это импортировать hibernateconfig.xml в appContext.xml до импорта контекста дао, как это:

appcontext.xml: 

<import resource="hibernateconfig.xml"/> 
<import resource="dao-config.xml"/> 

Это гарантирует, что конфигурация спящего режима загружается до конфигурирования дао.

+0

Perfect кейс! –

+0

Да. Спасибо :) –