Автор оригинала: mkyong.
Здесь мы покажем вам два общих способа внедрения Spring bean в JBoss RESTEasy , ниже приведены решения, которые также должны работать на большинстве веб-фреймворков и реализаций JAX-RS.
- Использовать WebApplicationКонтексТуилы + Сервлетконтекст.
- Создайте класс для реализации Интерфейс ApplicationContextAware , рекомендуется использовать одноэлементный шаблон.
В этом уроке мы интегрируем RESTEasy 2.2.1.GA с Пружиной 3.0.5.ВЫПУСК .
1. Зависимости проекта
Не так много зависимостей, просто объявите RESTEasy и Spring core в своем Maven pom.xml
файл.
JBoss repository https://repository.jboss.org/nexus/content/groups/public-jboss/ org.jboss.resteasy resteasy-jaxrs 2.2.1.GA org.springframework spring-core 3.0.5.RELEASE org.springframework spring-context 3.0.5.RELEASE org.springframework spring-web 3.0.5.RELEASE javax.servlet servlet-api 2.4
2. Весенняя Фасоль
Простой компонент Spring с именем ” customerBo “, позже вы введете этот компонент в службу RESTEasy через Spring.
package com.mkyong.customer; public interface CustomerBo{ String getMsg(); }
package com.mkyong.customer.impl; import com.mkyong.customer.CustomerBo; public class CustomerBoImpl implements CustomerBo { public String getMsg() { return "RESTEasy + Spring example"; } }
Файл: applicationContext.xml
3.1 Веб-приложение contextutils + сервлетконтекст
Первое решение – использование JAX-RS @Context
для получения ServletContext и WebApplicationContextUtils
для получения контекста приложения Spring с помощью этого контекста приложения Spring вы можете получить доступ и получить компоненты из контейнера Spring.
package com.mkyong.rest; import javax.servlet.ServletContext; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; import org.springframework.context.ApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import com.mkyong.customer.CustomerBo; @Path("/customer") public class PrintService { CustomerBo customerBo; @GET @Path("/print") public Response printMessage(@Context ServletContext servletContext) { //get Spring application context ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext); customerBo= ctx.getBean("customerBo",CustomerBo.class); String result = customerBo.getMsg(); return Response.status(200).entity(result).build(); } }
3.2 Внедрение программного обеспечения ApplicationContextAware
Второе решение – создать класс, реализующий Spring ApplicationContextAware
и сделайте его одноэлементным, чтобы предотвратить создание экземпляров из других классов.
package com.mkyong.context; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; public class SpringApplicationContext implements ApplicationContextAware { private static ApplicationContext appContext; // Private constructor prevents instantiation from other classes private SpringApplicationContext() {} @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { appContext = applicationContext; } public static Object getBean(String beanName) { return appContext.getBean(beanName); } }
Не забудьте зарегистрировать этот компонент, иначе Spring container не будет знать об этом классе.
Файл: applicationContext.xml
В службе REST вы можете использовать новый одноэлементный класс – ” SpringApplicationContext
“, чтобы получить компонент из контейнера Spring.
package com.mkyong.rest; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.core.Response; import com.mkyong.context.SpringApplicationContext; import com.mkyong.customer.CustomerBo; @Path("/customer") public class PrintService { CustomerBo customerBo; @GET @Path("/print") public Response printMessage() { customerBo = (CustomerBo) SpringApplicationContext.getBean("customerBo"); String result = customerBo.getMsg(); return Response.status(200).entity(result).build(); } }
4. Интегрируйте RESTEasy с Spring
Чтобы интегрировать оба в веб-приложение, добавьте Spring ” ContextLoaderListener
” в свой web.xml .
Файл:web.xml
Restful Web Application resteasy.resources com.mkyong.rest.PrintService org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap org.springframework.web.context.ContextLoaderListener resteasy-servlet org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher resteasy-servlet /*
5. Демонстрация
Оба решения 1 и 2 будут генерировать один и тот же результат:
Скачать Исходный Код
Рекомендации
- Доступ к компонентам Spring из устаревшего кода
- Общий способ интеграции Spring с другими рамки
- Лучше, чем ничего, отдыхай + весенний пример
- Приложение contextaware javadoc
- Шаблон одноэлементного Вики на Java
- Получить контекст приложения Spring
Оригинал: “https://mkyong.com/webservices/jax-rs/resteasy-spring-integration-example/”