具有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无法使用...