Прежде всего, это не упрямый вопрос, и я прочитал большинство связанных вопросов в SO. Я ищу совет, если ниже реализовано решение - правильный подход/метод.Зависимость Инъекция с использованием CDI с Джерси с/без привязки к абстрактному
Я прочитал много учебников о том, как реализовать DI в jersey-based
веб-приложение, и большинство из них рекомендуют его должно создать в WEB-INF/*
с beans.xml
для того, чтобы позволить CDI, но мне интересно, если с помощью Джерси AbstractBinder
достичь того же результата ?
У меня есть майка-веб-приложение, которое имеет следующее web.xml
<servlet>
<servlet-name>Test Jersey</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.test.config.AppConfig</param-value>
</init-param>
И com.test.config.AppConfig
, как следовать
public class AppConfig extends ResourceConfig {
public AppConfig() {
AbstractBinder binder = new AbstractBinder() {
@Override
protected void configure() {
bind(Impl.class).to(Interface.class).in(Singleton.class);
}
};
register(binder);
register(MultiPartFeature.class);
packages("..."); //packages
}
}
, а затем я аннотирования интерфейсов и реализация получает впрыскивается
@Inject
private SomeInterface someInterface;
Над работами просто отлично. Независимо от того, что я хочу быть введенным, я включаю его в binder
, а затем указываю injection point
и вводит его.
Там не находится в WEB-INF/
каталоге нет beans.xml
и мне интересно, если с помощью AbstractBinder
внутри AppConfig
, что расширяет ResourceConfig
устранить необходимость объявлять beans.xml
?
Добавление beans.xml
, вероятно, позволит сканировать классы, которые проложили бы путь для DI, когда мы аннотируем классы с помощью @Component
или @ManagedBean
.
Несмотря на это, я был бы рад услышать ваши отзывы/посоветуйте/предложения/рекомендации о том, чтобы
- палочке с существующим решением (как показано выше) для DI в Джерси, потому что ....?
- Переключиться на классы аннотации (которые необходимо ввести) и использовать аннотацию-открытие
beans.xml
, потому что ...? - Джерси использует
HK2
по умолчанию, стоит ли использовать другой контейнер DI или HK2 достаточно хорош? - Каково ваше мнение о Spring Jack Джерси по сравнению с JavaEE 6 CDI только для целей DI?
Есть много руководств, в которых указано, что CDI не поддерживается Tomcat? но работал выше, используя AbstractBinder
, и я предполагаю его, потому что я программно связываю? Любые комментарии.