Неуправляемое веб-приложение Spring и файл JAR с функциями Spring - PullRequest
0 голосов
/ 14 апреля 2010

Моя идея состоит в том, чтобы создать файл .jar, содержащий службы

управляемый Spring, который должен быть получен getBean ()

Я хочу поместить его в WEB-INF / lib веб-приложения

Затем в веб-приложении Servlets я хочу использовать функциональность файла Jar.

1 Идея. Создать классы, которые инкапсулируют вызов в Spring Context (getBean () и т. Д.) Например, класс, который я буду использовать, просто получит параметр и вернет параметр, но внутри этого класса будет вызов getBean и т. д.

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

2 Идея. Есть ли другое простое решение, как упаковать в jar и затем использовать Services в среде, не управляемой Spring?

Ответы [ 2 ]

2 голосов
/ 14 апреля 2010

Если вы звоните getBean() на ApplicationContext, я должен думать, что вы несколько упускаете суть. Весна была изобретена, чтобы избавиться от этой точной проблемы. Пружина работает по принципу инжекции зависимостей (инверсия управления). Это означает, что вы отправляете сервисы туда, где они нужны, а не запрашиваете их по имени, и если они названы, то именование является частью конфигурации, а не кода.

Нет проблем с использованием классов из другого jar, если он является частью classpath. Они просто загружены, как и любой другой класс. Даже если они не в пути к классам, вы можете использовать ClassLoader, если требуется, чтобы получить их. Где это становится немного сложнее, это где классы находятся в другой JVM. Даже это можно сделать, но, похоже, это не так.

Где этот параметр, о котором вы говорите? Я настоятельно рекомендую вам связать именованные службы с некоторым контекстом способом RESTful (что хорошо поддерживается в Spring 3 MVC), а не реализовывать какой-либо реестр или даже явное расположение службы из загруженного вручную контекста. *

1 голос
/ 14 апреля 2010

Есть много возможностей сделать это. Чтобы использовать Spring, вам не нужно ВСЕ, чтобы быть Spring.

Например, вы можете настроить Spring в вашем web.xml:

<web-app ...>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:com/acme/foo/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    ...
</web-app>

В ваших сервлетах вы можете сделать WebApplicationContextUtils.getWebApplicationContext(servletContext).getBean("myBean") для доступа к бобам.

В зависимости от среды существуют другие способы интеграции. Например, вы можете использовать org.springframework.web.jsf.el.SpringBeanFacesELResolver в JSF. Здесь - пример приложения JSF с компонентами, управляемыми Spring.

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