如何在没有球衣的情况下创建“自定义注入提供程序”(工厂)

时间:2018-08-02 10:23:27

标签: java jersey jax-rs cdi supplier

是否有一种方法可以达到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是可取的

1 个答案:

答案 0 :(得分:0)

我找到了使用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拥有没有参数的公共构造函数,这确实可以解决问题。