Сочетание весеннего проекта и Джерси
Я построил проект с 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(); } }
- Точка выделения AOP Spring, соответствующая annotations по интерфейсу
- Как перезагрузить файл свойств весной 4 с помощью аннотаций?
- Spring Data + JPA с несколькими источниками данных, но только один набор репозиториев
- Возвращает только строковое сообщение от Spring MVC 3 Controller
- Тесты JUnit проходят в Eclipse, но сбой в Maven Surefire
- Как вызвать десериализатор по умолчанию из пользовательского десериализатора в jacksonе
- Mockito: ввод реальных объектов в закрытые поля @Autowired
- Как отключить сообщения журнала DEBUG в журнале Spring?
- запросить бобовые бобы весенним тестированием
- Отдых с весны и корс
- Является ли метод пакетной обработки хорошим?
- Весна: убедитесь, что конкретный бит сначала инициализируется
- Недопустимая ошибка таблицы Hibernate
ПРИМЕЧАНИЕ. Связанные примеры проектов ниже от ветви Джерси-мастера, которая в настоящее время является снимком 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
и генерирует исключение, если оно его не находит.
Я нашел несколько способов обойти это.
-
Пример этого упоминал человек, который поднял вопрос. Вы можете создать инициализатор 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; } }
-
Вы можете просто добавить
applicationContext.xml
в путь к classам и просто зарегистрировать весенний class конфигурации Java в качестве компонента -
Есть еще один способ, о котором я могу думать, но я сохраняю это какое-то время, когда я могу проверить его.
ОБНОВИТЬ
«Не удалось прочитать 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