如何创建没有球衣的 "Custom Injection Provider"(工厂)

How to create a "Custom Injection Provider" (factory) without jersey

有没有一种方法可以实现 here 描述的相同结果,而不是依赖球衣而是纯粹的 jax-rs?我想创建一个像 Jersey 这样的自定义注入提供程序,这样我就可以注入 MyClass 从 HttpServletRequest

中提取自定义数据
@Inject
protected MyClass myClass;

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

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

编辑:

CDI 也是一个不错的选择,但是纯 jax-rs 更可取

我使用 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 有一个没有参数的 public 构造函数,这就成功了。