Можно ли построить объект частично с помощью Spring DI и частично с помощью Jersey DI?

У меня есть класс JerseyWebService, который использует 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;

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

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

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


person bl3e    schedule 22.06.2015    source источник
comment
Если вы используете довольно свежую версию Jersey 2, простое добавление библиотеки jersey-spring3 в ваше приложение должно позволить Джерси зависимо вводить ваши Spring bean-компоненты без необходимости пользовательской привязки.   -  person Don Bottstein    schedule 23.06.2015


Ответы (1)


Это должно работать. Если у вас есть необходимая зависимость интеграции Spring-Jersey[1] и правильно настроено приложение[2]

1. Подробнее о поддержке Spring DI в Джерси
2. см. официальный пример Jersey Spring

Происходит следующее: HK2 (фреймворк DI в Джерси) будет искать InjectionResolver для аннотации @Autowired, чтобы разрешить зависимость. Зависимость jersey-spring3 имеет AutowiredInjectionResolver, который содержит ссылку на Spring ApplicationContext. Оттуда это просто вопрос поиска в контексте приложения, чтобы разрешить зависимость.

person Paul Samsotha    schedule 23.06.2015