JAX-RS,Spring& ServletConfig:如何在Configurator

时间:2018-05-28 07:12:14

标签: spring dependency-injection jax-rs web.xml servletconfig

我很难将javax.servlet.ServletConfig放入使用org.springframework.context.annotation.Configuration注释的班级。

我的团队决定使用spring进行依赖注入,并且我尝试使用它来迁移我们的一个简单的Rest服务。

我的约束是:

  • JAX-RS:我们有几个REST服务实现了JAX-RS,我们真的不想改变它。
  • 没有绑定JAX-RS的特定实现(Jersey& RESTEasy对我们来说很好,我们可以在不改变底层代码的情况下从一个更改为另一个)
  • 从spring导入尽可能少的依赖项:目前我只从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中的servlet配置,如下所示:

@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中找到的字符串初始化的设置bean。

  • 有可能吗?
  • 你知道怎么做?
  • 知道我们在基础Tomcat上运行,CDI会更容易吗? (如果我需要将tomcat与CDI一起使用,我已经找到this

1 个答案:

答案 0 :(得分:0)

您能否尝试将所有平针织CDI相关的罐子添加到您的应用程序中?