Сочетание весеннего проекта и Джерси

Я построил проект с Spring JPA, и теперь я хочу использовать его в проекте в Джерси. Я добавил проект SJPA как зависимость в моем pom.xml

Я хотел бы использовать мои classы обслуживания из моего SJPA, когда я использую методы GET / POST / PUT / DELETE. Есть ли простой способ сделать это с помощью аннотаций? Или мне нужно получить AnnotationConfigApplicationContext в каждом classе? Чувствует себя пустой тратой.

 @Path("/users") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public final class UserResource { private AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); private PodcastService service; @GET public Response getAllPodcasts() { context.scan("org.villy.spring.service"); context.refresh(); service= context.getBean(PodcastService.class); return Response.ok(service.findAll()).build(); } } 

ПРИМЕЧАНИЕ. Связанные примеры проектов ниже от ветви Джерси-мастера, которая в настоящее время является снимком Jersey 3, который еще не выпущен. Джерси 3 будет использовать весну 4, так что вы можете заметить зависимость jersey-spring4 . Эта зависимость еще не существует, поскольку Джерси 3 еще не выпущен (вероятно, не на время). Таким образом, зависимость от использования – jersey-spring3 . Весь пример должен работать одинаково, просто изменяя эту зависимость. Если вы хотите использовать Spring 4, см. Зависимости, перечисленные в примере pom ниже в этом ответе


Вам не нужно создавать ApplicationContext где вам нужна эта служба. Вы должны иметь возможность настроить глобальный. У Джерси есть модуль для этого, который объединяет две структуры. Это позволяет вам просто @Autowired все ваши службы Spring в ваши classы ресурсов в Джерси.

Вместо того, чтобы пытаться привести какой-либо пример, я просто свяжусь с официальными примерами. Они прямо из проектов, поэтому ссылки должны быть хорошими в течение некоторого времени. Особое внимание не уделяется зависимостям Maven. Вам нужно будет убедиться, что они будут работать на этом примере.

  • Джерси 2.x с конфигурацией Spring XML
  • Джерси 2.x с конфигурацией Spring Java [ 1 ]
  • Джерси 1.x с конфигурацией Spring XML
  • Джерси 2.x с весенним ботинком

Примечание. Версия ${spring3.version} в примерах – 3.2.3.RELEASE. Можно использовать Spring 4 с примерами, но вам нужно будет исключить все переходные зависимости Spring от зависимости jersey-spring3 .

[ 1 ]. Одна вещь, чтобы отметить пример Java config, заключается в том, что он использует автономное приложение. Для использования конфигурации Java в webapp требуется немного обмана. Это известная ошибка, когда Джерси ищет параметр contextConfigLocation с расположением файла applicationContext.xml и генерирует исключение, если оно его не находит.

Я нашел несколько способов обойти это.

  1. Пример этого упоминал человек, который поднял вопрос. Вы можете создать инициализатор Spring, где вы настраиваете контекст весны и переопределяете свойство param. (См. Полный пример здесь ).

     @Order(1) public class SpringWebContainerInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletContext) throws ServletException { registerContextLoaderListener(servletContext); // Set the Jersey used property to it won't load a ContextLoaderListener servletContext.setInitParameter("contextConfigLocation", ""); } private void registerContextLoaderListener(ServletContext servletContext) { WebApplicationContext webContext; webContext = createWebAplicationContext(SpringAnnotationConfig.class); servletContext.addListener(new ContextLoaderListener(webContext)); } public WebApplicationContext createWebAplicationContext(Class... configClasses) { AnnotationConfigWebApplicationContext context; context = new AnnotationConfigWebApplicationContext(); context.register(configClasses); return context; } } 
  2. Вы можете просто добавить applicationContext.xml в путь к classам и просто зарегистрировать весенний class конфигурации Java в качестве компонента

         
  3. Есть еще один способ, о котором я могу думать, но я сохраняю это какое-то время, когда я могу проверить его.


ОБНОВИТЬ

«Не удалось прочитать class компонента-кандидата … ASM ClassReader не смог проанализировать файл classа – возможно, из-за новой версии файла Java-classа, которая еще не поддерживается»

Кажется, это связано с этим , используя Spring 3 с Java 8. Как я уже сказал, если вы хотите использовать Spring 4, вам нужно будет исключить переходные зависимости Spring от jersey-spring3 и просто изменить версию явно объявленных зависимостей Spring , Вот пример, который я тестировал и работает.

  org.glassfish.jersey.ext jersey-spring3   org.springframework spring-beans   org.springframework spring-core   org.springframework spring-aop   org.springframework spring-web     org.springframework spring-web 4.1.0.RELEASE compile   org.springframework spring-aop 4.1.0.RELEASE compile   org.aspectj aspectjrt 1.8.1   org.aspectj aspectjweaver 1.8.1  
  • Доступ к Spring beans из представления Tiles (JSP)
  • Уровни DAO и Service (JPA / Hibernate + Spring)
  • Использование автозапуска Spring 3 в автономном приложении Java
  • У пользователя базы данных HSQL отсутствует привилегия или объект не найдена ошибка
  • Как работает аннотация «Spring @ResponseBody» в этом примере приложения RESTful?
  • Bypass GeneratedValue в спящем режиме (данные объединить не в db?)
  • Как вызвать метод после инициализации бина?
  • Как выбрать URL-адрес моей Spring Boot Webapp?
  • Аутентифицированная среда равна нулю
  • Местоположение spring-context.xml
  • Роль / цель ContextLoaderListener весной?
  • Interesting Posts

    Как настроить 4K TV через HDMI на мой компьютер? (Получение задержки мыши / видео)

    Как управляется память CUDA?

    Беспроводный интернет стал очень медленным на моем 27-дюймовом IMac

    HttpWebRequest очень медленный!

    Стермеры против Лемматизаторов

    Могу ли я обновить доступ к беспроводной сети, переключив маршрутизатор с 802.11g на 802.11n без обновления всех клиентов?

    Как заполнить формулу так, чтобы ссылки диапазона были смещены на 5 строк, а не на 1 строку

    Git: Как удалить все необработанные файлы?

    INSTALL_FAILED_NO_MATCHING_ABIS при установке apk

    Загрузка изображений из фоновой темы с использованием блоков

    Как включить виртуализацию пользовательского интерфейса в стандартном WPF ListView

    Восстановление лицензионного ключа Windows XP

    Почему Java ограничивает размер метода до 65535 байт?

    Что означают скобки и число после команды Unix или функции C?

    Приложение не работает при установке с Inno Setup

    Давайте будем гением компьютера.