gpt4 book ai didi

jakarta-ee - CDI生产商达到一次

转载 作者:行者123 更新时间:2023-12-03 09:08:10 25 4
gpt4 key购买 nike

我创建了这个生产者:

@RequestScoped
public class StripeWebHookProducer {

private static String HEADER_SIGNATURE = "Stripe-Signature";

@Inject @Context private HttpServletRequest request;

@Produces
public Event getStripeEvent() {
Event result = null;
//...
return result;
}
}

正如您所看到的,它的作用域为@RequestScoped,因此到目前为止,我已经能够确定每次在服务器上收到请求时都应该创建它。

我将其注入(inject)到我的 servlet 中:

@WebServlet(...)
public class StripeWebhook extends HttpServlet {
@Inject private Event paymentEvent;

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
switch (this.paymentEvent.getEventType())
{
case customer_subscription_trialwillend:
break;
case customer_subscription_updated:
break;
}
// TODO Auto-generated method stub
doGet(request, response);
}
}

尽管如此,StripeWebHookProducer.getStripeEvent 只到达一次。有什么想法吗?

最佳答案

似乎您在类/bean 和生产者方法上的注释不匹配。问题是,生产者方法必须放置在某些 CDI bean 中。在您的例子中,这个 bean 是 StripeWebHookProducer 并且您有它 @RequestScoped 注释。这完全没问题,但是,这似乎是偶然的,因此您可能需要重新考虑并使用另一种,例如 @ApplicationScoped@Dependent

现在是生产者方法本身。生产者的结果不受生产者所在的 CDI bean 上的注释的影响。相反,它是通过该方法上的注释来定义的。这是一些带有解释的代码。

@ApplicationScoped
public class MyBeanWithProducer {
@Produces
@Dependent
public ProducedBean produceIt() {
}
}

上面的示例是具有应用程序范围的 CDI bean MyBeanWithProducer。它包含一个能够创建另一个 CDI bean ProducedBean 的生产者方法,该方法的作用域为 @Dependent。请注意,生成的 bean 的范围与 MyBeanWithProducer 的范围不同。如果您没有在生产者方法上定义作用域,则默认为 @Dependent

因此,您在应用程序中可能想要的内容可能如下所示:

@ApplicationScoped // ensures there is only one instance of this bean in your app; assuming you have have no other request based logic here
public class StripeWebHookProducer {

private static String HEADER_SIGNATURE = "Stripe-Signature";

@Inject @Context private HttpServletRequest request;

@Produces
@RequestScoped // this will make sure this bean is created on every request anew
public Event getStripeEvent() {
Event result = null;
//...
return result;
}
}

关于jakarta-ee - CDI生产商达到一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45216515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com