2012-04-17 2 views
3

Я пытаюсь интегрировать Resteasy и Spring; Я следил за обоими документами для Resteasy и этим сообщением: Inject Spring beans into RestEasy. У меня есть работа с использованием @Autowire или других аннотаций Spring на классе отдыха, но я хотел бы сделать это, сохраняя мои классы отдыха свободными от зависимостей весны (или DI). Я также хотел бы настроить весну только через конфигурацию java. В конфигурации пружинной я добавил следующее:Конфигурация Java Spring и Resteasy

<context:component-scan base-package="package.where.spring.configuration.beans.are , package.where.rest.classes.are"> 
<context:include-filter type="annotation" expression="javax.ws.rs.Path"/> 
</context:component-scan> 

и, конечно, у меня в web.xml, так что пружина конфигурации подхватывается SpringContextLoaderListener:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:/spring-config.xml</param-value> 
</context-param> 

Удаление аннотаций @Autowire, если I и удалите первый пакет (где я сконфигурировал инъекции через конфигурацию Spring java), никакая инъекция не происходит, и поля остаются нулевыми; если я удалю второй пакет, URL-адреса для остальных классов не будут распознаны при помощи resteasy.

Я хотел бы настроить инъекции только в конфигурации Spring, есть ли способ, чтобы resteasy распознавал пути от весенних бобах, которые настроены извне?

EDIT: Я заметил, что я пытаюсь делать работы с @Provider аннотированных классов, при условии, что вы правильно настроить Spring:

<context:component-scan base-package="my.package1 , my.package2"> 
    <context:include-filter type="annotation" expression="javax.ws.rs.ext.Provider"/> 
</context:component-scan> 

Но мистерия глубже, чем я думал, что первый ... Я более уверенно, что я на правильном пути и просто пропустил шаг!

ответ

0

Использование @Resource JSR-250 вместо @Autowired - большой шаг вперед; он делает то, что необходимо от @Autowired, и это JSR, а не Spring.

Может быть достаточно хорошим для многих целей.

1

Гораздо лучший подход - использовать аннотации JSR-330.

Вместо @Autowired, предпочитайте использовать @Inject. Spring поддерживает аннотации JSR-330 и будет использовать реализацию Autowire под обложками. Для ваших весенних бобах, аннотированных @Component, @Service, просто замените аннотацию на JSR-330, специфическую @Named.

Если вы используете maven, просто добавьте следующее в свой файл pom.xml.

<dependency> 
    <groupId>javax.inject</groupId> 
    <artifactId>javax.inject</artifactId> 
    <version>1</version> 
</dependency> 
Смежные вопросы