2015-06-22 4 views
2

У меня есть класс JerseyWebService, который использует Джерси DI впрыснуть DEPENDENCYВозможно ли построить объект частично с помощью Spring DI и частично с помощью Jersey DI?

@Path("/baskets") 
public class JerseyWebService { 
    @Inject 
    ExternalApiServiceInterface api; 
    ... 
} 

Зависимости указанный в связующем

public class CustomBinder extends AbstractBinder { 
    @Override 
    protected void configure() { 
     bind(ExternalApiService.class).to(ExternalApiServiceInterface.class); 
     ... 
    } 

Но проблема здесь заключается в том, что ExternalApiService имеет другие зависимости и использует Spring для впрыскивать их.

class ExternalApiService implements ExternalApiServiceInterface{ 
    @Autowired 
    AnotherService aservice; 

Можно указать только некоторые зависимости в связующем, которые Джерси вдохнет и другие зависимости впрыскивается к весне?

Если нет, то если бы @Inject вместо @Autowired в ExternalApiService было бы обязательным указывать все привязки в классе связующего?

Есть ли у Джерси DI нет функции Autowiring как функция или делегировать инъекцию зависимости весне, если она не может найти привязку?

+0

Если вы используете довольно недавнюю версию Джерси 2, просто добавив библиотеку jersey-spring3 к вашему приложению, вы должны позволить Джерси зависеть от впрыскивания ваших весенних бобах, не требуя специальной привязки. –

ответ

1

It should work. Учитывая, у вас есть необходимое Спринг-Джерси интеграции зависимость [] и правильно настроили приложение []

1. See Spring DI support in Jersey
2. See official Jersey Spring example

Что произойдет, будет HK2 (каркас DIY Джерси) будет искать InjectionResolver для @Autowired аннотации, чтобы разрешить зависимость. У зависимостей jersey-spring3 есть AutowiredInjectionResolver, в котором содержится ссылка на весну ApplicationContext. Оттуда это просто вопрос поиска в контексте приложения, чтобы разрешить зависимость.

Смежные вопросы