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

问题描述 投票:0回答:1

具有Jersey的Spring引导,我想使用一些内部使用依赖项注入的过滤器。

问题是,泽西服务器似乎无法使用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.....")
  }
}

这是applicationContext.xml的外观

<?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>

最后是Spring boot主类

@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);
    }

我运行主类,并调用JerseyConfig类,并且我能够注册过滤器。不幸的是,一旦服务运行,当我向一个端点运行请求时,过滤器将通过setHttpFinagleService]的空依赖关系调用到CommonFinagleService方法

我也在使用jersey-spring4依赖项

<dependency>
            <groupId>org.glassfish.jersey.ext</groupId>
            <artifactId>jersey-spring4</artifactId>
            <version>2.27</version>
        </dependency>

并且Spring boot和Spring是2.1.0和5.1.8

任何想法这里可能出什么问题

使用Grizzly + Jersey,一切正常。

问候

具有Jersey的Spring引导程序,我想使用一些内部使用依赖项注入的过滤器。问题是,似乎Jersey Server无法使用...

java spring spring-boot jersey jersey-2.0
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.