猿问

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

有没有办法实现这里描述的相同结果而不取决于球衣,而是纯粹的 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 更可取


ABOUTYOU
浏览 139回答 1
1回答

12345678_0001

我使用 CDI 找到了这个解决方案:@ApplicationScopedpublic class MyFactoryOrSupplier {    @Produces    @RequestScoped    public IMyClass getMyClass(@Context HttpServletRequest request) {        return (IMyClass) request.getAttribute("MyInjectedClass");    }}然后在我的 servlet 中:@Injectprotected IMyClass myClass;bean.xmlbean-discovery-mode="annotated"实际上,MyClass implements IMyClass因为我不知道MyClass有一个没有参数的公共构造函数,这做到了。
随时随地看视频慕课网APP

相关分类

Java
我要回答