Проект Spring, который импортирует другой проект spring

#java #spring

#java #spring

Вопрос:

У меня есть два проекта spring. Оба в настоящее время являются портлетами.

Я хотел бы взять один и преобразовать его в jar и добавить его в качестве зависимости (используя maven) к другому, затем вызвать код)

Любые советы по шагам были бы замечательными.

Я пробовал, и хотя все (включая контекст) упаковывается в мой jar, при вызове классов из портлета, использующего jar, появляется, что контекст приложения не загружен / не работает

 Current jar structure 
application-context.xml
META-INF/
<package>/classes
  

ПРАВКА__
Повторные ошибки: не удается найти определение компонента для класса x

Комментарии:

1. вы имели в виду, что при попытке загрузить контекст приложения из jar он не работает? если это так, сообщение об ошибке?

Ответ №1:

Есть несколько способов сделать это, но это сильно зависит от того, что вы пытаетесь сделать. Вы можете включить контекст в свой web.xml …

 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/applicationContext.xml, classpath:childContext.xml</param-value>
</context-param>
  

Другой вариант — импортировать дочерний контекст непосредственно из контекста вашего приложения.

 <import  resource="classpath:childContext.xml/>
  

Я не слишком большой поклонник этого, поскольку эти контексты объединяются, что может быть кошмаром для имен компонентов; тем не менее, они работают.

Обычно лучше, чтобы ваш JAR предоставлял какой-то завод или статический конструктор, который считывает свой собственный Spring config XML, а затем просто предоставляет то, что вы хотите использовать в качестве сервиса. Возможно, это не лучшее решение для вашей конкретной проблемы, но это то, что следует учитывать.

Комментарии:

1. Спасибо, я попробую это. (опция factory / static method) Поэтому я бы использовал объект ApplicationContext в этом методе — Есть какие-либо советы по файловой структуре, которую должен использовать мой jar shoudl? — Я отредактирую приведенное выше, чтобы показать текущую структуру

2. Сработало как по волшебству!!! Создание статического метода, загрузка контекста и получение из него компонента service было на месте.

Ответ №2:

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

  1. Почему эти два разных проекта в первую очередь? Вы хотите повторно использовать второй проект в нескольких родительских проектах?
  2. Какие компоненты / службы, предоставляемые дочерним контекстом, должны использоваться непосредственно родительским контекстом.

Переосмысление этих зависимостей может привести к более элегантному и удобному в обслуживании решению.

Комментарии:

1. Большое спасибо, ответ на 1. да. Ответ на 2 — это код, который предоставляет сервис, который ищет информацию в dbs для создания объекта, используемого всеми другими потребителями (я не хочу создавать это в каждом проекте)