JAX-RS, Spring & ServletConfig: как получить доступ к сервлетной конфигурации в Конфигураторе - PullRequest
0 голосов
/ 28 мая 2018

У меня проблемы с получением javax.servlet.ServletConfig в классе, помеченном org.springframework.context.annotation.Configuration.

Моя команда решила, что мы должны использовать spring для внедрения зависимостей, и я пытаюсь использовать его для переноса одного из нашихПростой отдых.

Мои ограничения:

  • JAX-RS: У нас есть несколько служб REST, внедривших JAX-RS, и мы не хотим этого менять.
  • Непривязанный к конкретной реализации JAX-RS (Jersey & RESTEasy отлично работают для нас, и мы можем переходить с одного на другое без изменения базового кода)
  • Импортировать как можно меньше зависимостей из Spring: на данный момент яимпортировать только org.springframework:spring-context из весеннего проекта.
  • Нет поломки API: устарело, но сервис должен продолжать работать во время перехода, используя наш старый способ работы.
  • Строковый параметропределяется в сервисе web.xml.Мне нужно получить его, создать экземпляр Bean и вставить полученный bean-код в несколько мест в коде.
  • Я не хочу связываться с Spring Boot / MVC / ..., так как сервис уже работаети мне просто нужна часть внедрения зависимостей.

То, что у меня уже есть:

Код использует javax.ws.rs.core.Application, с классом, который выглядит так:

public class MyApplication extends Application {

  @Context
  private ServletConfig cfg;

  public DSApplication() {
  }

  @Override
  public Set<Class<?>> getClasses() {
      return new HashSet<>();
  }

  @Override
  public Set<Object> getSingletons() {
    Set<Object> set = new HashSet<>();
    String injectionStr = cfg.getInitParameter("injection");
    boolean injection = false;
    if (null != injectionStr && !injectionStr.isEmpty()) {
        injection = Boolean.valueOf(injectionStr);
    }

    if (injection) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(
                DSServiceProducer.class,
                CContextBeanProvider.class
        );
        IDSService service = context.getBean(IDSService.class);
        set.add(service);
    } else {
        set.add(new DSService()); //Old way
    }
    return set;
  }
}

Мне нужна конфигурация сервлета в CContextBeanProvider, которая выглядит следующим образом:

@Configuration
public class CContextBeanProvider {

  private ServletConfig cfg; // How to get this here ?

  @Bean
  public CContextBean cContextBean() {
    String bean = cfg.getInitParameter("cpuContext");
    return new CContextBean(bean);
  }
}

CContextBean - это параметр настройки, инициализированный из строки, найденной в web.xml службы.

  • Возможно ли это?
  • У вас есть идеи, как?
  • Было бы проще с CDI, зная, что мы работаем на базе Tomcat?(Я уже нашел это , если мне нужно использовать tomcat с CDI)

1 Ответ

0 голосов
/ 29 мая 2018

Не могли бы вы попытаться добавить все банки jarsey CDI в ваши приложения?

...