【问题标题】:How to create a "Custom Injection Provider" (factory) without jersey如何在没有球衣的情况下创建“自定义注入提供程序”(工厂)
【发布时间】:2018-08-02 10:23:26
【问题描述】:

有没有办法达到here 所描述的相同结果,而不是取决于球衣,而是纯粹的 jax-rs?我想创建一个像 Jersey 这样的自定义注入提供程序,这样我就可以注入 MyClass,从 HttpServletRequest 中提取自定义数据

@Inject
protected MyClass myClass;

我还发现 this discussion 很有用,它与 java.util.function.Supplier 的工作原理相同,但此代码中仍需要 Jersey:

bindFactory(MyFactoryOrSupplier.class)
.to(MyClass.class)
.in(RequestScoped.class);

编辑:

CDI 也是一个不错的选择,但最好使用纯 jax-rs

【问题讨论】:

  • @Context@Provider 在 jax-rs 规范中定义
  • 你能详细说明一下吗?
  • a hack using @Path。除此之外,没有纯粹的 JAX-RS 方式。 JAX-RS 没有指定任何注入特性,因为它是 Java EE 的一部分,而 Java EE 已经有 CDI。任何解决方案(没有 CDI)都将依赖于实现。
  • 好的,现在我了解情况了。那么,CDI 如何成为可能的解决方案?

标签: java jersey jax-rs cdi supplier


【解决方案1】:

我使用 CDI 找到了这个解决方案:

@ApplicationScoped
public class MyFactoryOrSupplier {

    @Produces
    @RequestScoped
    public IMyClass getMyClass(@Context HttpServletRequest request) {
        return (IMyClass) request.getAttribute("MyInjectedClass");
    }
}

然后在我的 servlet 中:

@Inject
protected IMyClass myClass;

beans.xml

bean-discovery-mode="annotated"

实际上是MyClass implements IMyClass,因为我不知道MyClass 有一个没有参数的公共构造函数,这就是诀窍。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 2015-04-10
    • 1970-01-01
    相关资源
    最近更新 更多