当前位置: 首页 > 知识库问答 >
问题:

带有依赖注入的Spring boot和Jersey过滤器

孙斌
2023-03-14

问题是,Jersey服务器似乎不能使用Spring的ApplicationContext,我们在这里定义了这种依赖关系。

这里是JerseyConfiguration

@Configuration
public class JerseyConfig extends ResourceConfig {

    private static final String CONTEXT_CONFIG = "contextConfig";

    private static final String RESOURCE_PACKAGE = "presentation.resource";

    public JerseyConfig() {
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        applicationContext.refresh();
        property(CONTEXT_CONFIG, applicationContext);
        register(SpringLifecycleListener.class);
        register(MyFilter.class); //Filter I want to use 
        packages(RESOURCE_PACKAGE);
    }
}

这里是具有@autowire的筛选器

@Priority(40)
@Primary
@Provider
@MyFilter
class MyFilter(@Context var resourceInfo: ResourceInfo) extends ContainerRequestFilter with DefaultRuntime {

  implicit var finagleService: CommonFinagleService = _

  @Primary
  @Autowired(required = false)
  def setHttpFinagleService(@Autowired(required = false)
                            @Primary
                            _finagleService: CommonFinagleService): Unit = {
    finagleService = _finagleService
    finagleService.init(getProperties())
  }

  override def filter(context: ContainerRequestContext): Unit = {
    logger.debug(null, "filter running.....")
  }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config/>

    <bean id="httpFinagleService" class="foo.bla.CommonFinagleService"/>

</beans>
@Configuration
@SpringBootApplication(exclude = {org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration.class,
        org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration.class,
        org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration.class,
        org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration.class})
public class SpringBootRestApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {

        new SpringBootRestApplication().configure(new SpringApplicationBuilder(SpringBootRestApplication.class)).run(args);
    }
<dependency>
            <groupId>org.glassfish.jersey.ext</groupId>
            <artifactId>jersey-spring4</artifactId>
            <version>2.27</version>
        </dependency>

问候

共有1个答案

宗政松
2023-03-14

您需要将Spring选择的myfilter作为Bean,

添加到类级别的@component并确保它是通过组件扫描拾取的,如果您有

请注意,如果使用Spring DI,@provider在这里可能是多余的

 类似资料:
  • 我有一个控制器 服务接口 我想在我的控制器中使用@autowired来使用该服务,但当我运行应用程序时,我得到以下错误 org.springframework.beans.factory.beanCreationException:创建名为“demo application”的bean时出错:注入autowired依赖项失败;嵌套异常为org.SpringFramework.Beans.Facto

  • 问题内容: 从头开始,在没有任何Jersey 1.x知识的情况下,我很难理解如何在Jersey 2.0项目中设置依赖项注入。 我也知道HK2在Jersey 2.0中可用,但是我似乎找不到帮助Jersey 2.0集成的文档。 pom.xml 我可以让容器启动并使用我的资源,但是一旦我将@Inject添加到MyService,框架就会引发异常: 问题答案: 你需要定义一个并将其注册到你的JAX-RS应

  • 试图创建一个自定义的,我可以通过Jersey注入到我的资源中。 这在本问题的Java中有涉及。我已经阅读了有关这方面的文档,这些文档也是用Java编写的。最后,GitHub中的一些代码涵盖了相同的主题(通过Dropwizard完成)。 这将全部编译,但在运行时失败,出现以下异常 我不知道是我在向Scala的转换中犯了错误,还是我在注册绑定器时做了错误的事情。

  • 例如,Foos的资源可能如下所示: 对于酒吧:

  • 将EntityManager注入资源可以工作,但不能注入Callable。在这里,EntityManager保持。 请告知代码保存在这里是否比保存在GitHub上更好。

  • 从零开始,没有任何以前的Jersey 1.x知识,我很难理解如何在我的Jersey 2.0项目中设置依赖注入。 我也知道HK2在Jersey 2.0中可用,但我似乎找不到有助于Jersey 2.0集成的文档。 我可以让容器启动并提供我的资源,但是当我将@inject添加到MyService时,框架就会抛出一个异常: 我的starter项目可在github:https://github.com/do