gpt4 book ai didi

java - Jersey:将 Spring 组件注入(inject) ContainerRequestFilter

转载 作者:搜寻专家 更新时间:2023-10-31 20:31:02 25 4
gpt4 key购买 nike

我将 Jersey 1.4 ea 与 Spring 3.0 和 jersey-spring 一起使用一体化。如 here 所述,集成 Jersey 和 Spring 对于资源类非常有效.我怎么想将 Spring 组件注入(inject) 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 注入(inject)到 ContainerRequestFilter 中?

更新

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

参见 here以获得更详细的分析和可能的解决方案。

最佳答案

我在 Jersey 1.6 和 Spring 3.0.5 中看到了同样的情况。使用调试器,我可以看出即使我的代码标有@Component,Spring 和 Jersey 都会实例化它们自己的此类副本:

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

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

关于java - Jersey:将 Spring 组件注入(inject) ContainerRequestFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3747840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com