JAX-RS, Spring & ServletConfig: как получить доступ к настройке сервлета в конфигураторе
У меня проблемы с получением javax.servlet.ServletConfig
в класс с пометкой org.springframework.context.annotation.Configuration
,
Моя команда решила, что мы должны использовать Spring для внедрения зависимостей, и я пытаюсь использовать его для миграции одного из наших простых сервисов Rest.
Мои ограничения:
- JAX-RS: У нас есть несколько REST Services, в которых реализован JAX-RS, и мы не хотим это менять.
- Не привязан к конкретной реализации JAX-RS (Jersey & RESTEasy отлично работают для нас, и мы можем переходить с одного на другое без изменения базового кода)
- Импортируйте как можно меньше зависимостей из весны: на данный момент я импортирую только
org.springframework:spring-context
из весеннего проекта. - Нет поломок API: Устаревшее - это хорошо, но служба должна продолжать работать во время перехода, используя наш старый способ работы.
- Строковый параметр определен в сервисе
web.xml
, Мне нужно получить его, создать экземпляр Bean и вставить полученный bean-компонент в несколько мест в коде. - Я не хочу связываться с Spring Boot/MVC/..., так как сервис уже работает, и я просто хочу часть Dependency Injection.
Что у меня уже есть:
Код использования 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 ответ
Не могли бы вы попробовать добавить все jar-файлы, связанные с CDI, в ваши приложения?