nre*_*nre 5 java spring jax-rs jersey
我正在使用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
}
}
Run Code Online (Sandbox Code Playgroud)
当我将应用程序部署到Glassfish时,都会注册过滤器和用户管理器bean.我想知道我做错了什么.有没有办法将spring托管bean注入ContainerRequestFilter?
UPDATE
有点解决了.问题是如果这些bean是Java代理(与生成的代理类相对),Jersey不会获得Spring bean.通过在Spring proxy-target-class="true"配置的各个部分中指定属性,指示Spring始终使用代理类而不是Java代理,可以解决该问题.在我的场景中,我必须在a上指定它<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 {
}
Run Code Online (Sandbox Code Playgroud)
有传言称这将在 Jersey 的未来版本中添加,但现在似乎不起作用。我知道这是一个可怕的解决方案,但我暂时使用静态成员变量将 Jersey 和 Spring 连接在一起。布莱赫。
| 归档时间: |
|
| 查看次数: |
5866 次 |
| 最近记录: |