代理被注入 Jersey 子资源

问题描述

我将 Jersey 2.30.1 与自定义 ApplicationFactory 一起使用,该 com.atomgraph.linkeddatahub.apps.model.Application 注入了我的 Application 类(进一步称为 ResourceConfig)的实例。

register(ResourceBase.class); ... register(new AbstractBinder() { @Override protected void configure() { bindFactory(ApplicationFactory.class).to(com.atomgraph.linkeddatahub.apps.model.Application.class). proxy(true).proxyForSameScope(false). in(RequestScoped.class); } }); 为这个工厂注册一个活页夹,它不应该使用相同范围的代理

Application

然后我有两种类型的资源类注入 @Path("/") - 一个具有显式 @Path("/") public class ResourceBase { @Inject public ResourceBase(com.atomgraph.processor.model.Application application,...) { ... } @Path("{path: .+}") @Override public Class getSubResource() { return Container.class; } } 的根资源类,另一个由子资源方法(第一类)返回.

根资源

ApplicationImpl

这按预期工作——注入的实例是我自己的 public class Container extends ResourceBase { @Inject public Container(com.atomgraph.linkeddatahub.apps.model.Application application,...) { ... } } 实现。

子资源

这个资源类由上面的子资源方法返回:

ApplicationImpl

同样,我期望注入 AbstractBinder,就像在第一种情况下一样,但我得到了一个代理对象。

为什么? @RequestScoped 被配置为不对同一范围使用代理。那么范围是否不同呢?根据 Jersey documentation,从子资源方法返回一个类(就像我的代码那样)确保 Jersey 可以管理资源生命周期,并且认生命周期是请求范围的。但也许子资源不是请求范围的?我尝试在 Container添加显式 Foo,但没有帮助...

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)