繁体   English   中英

Jersey:将Spring组件注入ContainerRequestFilter

[英]Jersey: Inject Spring component into ContainerRequestFilter

我使用Jersey 1.4 ea和Spring 3.0以及jersey-spring集成。 整合新泽西州和Spring作为描述资源类工作正常这里 我怎么想将一个spring组件注入到ContainerRequestFilter中来对请求进行一些预处理。

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

UPDATE

有点解决了。 问题是如果这些bean是Java代理(与生成的代理类相对),Jersey不会获得Spring bean。 通过在spring配置的各个部分中指定proxy-target-class="true"属性,指示Spring始终使用代理类而不是Java代理,可以解决该问题。 在我的场景中,我必须在<tx:annotation-driven proxy-target-class="true" />上指定它。

请参阅此处以获取更详细的分析以及可能的解决方法。

我对Jersey 1.6和Spring 3.0.5也有同样的看法。 使用调试器,我可以说,即使我的代码用@Component标记,Spring和Jersey都会实例化它们自己的这个类的副本:

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

有一些喋喋不休,这将在未来的泽西岛版本中添加,但它现在似乎没有工作。 我知道这是一个可怕的解决方案,但我正在使用一个静态成员变量暂时将Jersey和Spring挂钩。 的Bleh。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM