Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jersey:将Spring组件注入ContainerRequestFilter_Java_Spring_Jersey_Jax Rs - Fatal编程技术网

Java Jersey:将Spring组件注入ContainerRequestFilter

Java Jersey:将Spring组件注入ContainerRequestFilter,java,spring,jersey,jax-rs,Java,Spring,Jersey,Jax Rs,我将Jersey 1.4 ea与Spring 3.0以及Jersey Spring集成一起使用。如前所述,集成Jersey和Spring对于资源类非常有效。 我希望如何将spring组件注入到中,以便对请求进行一些预处理 @Component public class SecurityFilter implements ContainerRequestFilter { // UserManager is a declared spring component // Inject

我将Jersey 1.4 ea与Spring 3.0以及
Jersey Spring
集成一起使用。如前所述,集成Jersey和Spring对于资源类非常有效。 我希望如何将spring组件注入到中,以便对请求进行一些预处理

@Component
public class SecurityFilter implements ContainerRequestFilter {

    // UserManager is a declared spring component
    // Injecting it should work somehow
    @Autowired
    private UserManager userManager;

    @Override
    public ContainerRequest filter(ContainerRequest request) {
        System.out.println(userManager);
        // prints out null on request
    }
}
当我将应用程序部署到Glassfish时,过滤器和用户管理器bean都已注册。我不知道我做错了什么。有没有办法将spring管理的bean注入ContainerRequestFilter

更新

有点解决了。问题是,如果SpringBean是Java代理(与生成的代理类相反),Jersey就不会获得SpringBean。通过在Spring配置的各个部分中指定
proxy target class=“true”
属性,指示Spring始终使用代理类而不是Java代理,可以解决此问题。在我的场景中,我必须在
上指定它


有关更详细的分析和可能的修复方法,请参阅

我在泽西1.6和斯普林3.0.5上看到了同样的情况。通过使用调试器,我可以看出,即使我的代码标记为@Component,Spring和Jersey都将实例化自己的此类副本:

@Path("/beams")
@Produces("text/xml")
@Component
@Scope("singleton")
public class BeamsResource {
}

有传言说这将被添加到未来版本的Jersey中,但它现在似乎不起作用。我知道这是一个可怕的解决方案,但我正在使用静态成员变量将Jersey和Spring连接在一起。呜呜。

我终于找到了解决办法。调试代码结果表明,Jersey如何从上下文中获取Springbean是一个问题。我的想法记录在您的解决方案中,即SecurityFilter是如何在web.xml文件或其他地方注册的?我在这里遇到了一个根本没有访问ContainerRequestFilter的问题。