gpt4 book ai didi

java - @Injection 不适用于 CDI bean

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:30:26 27 4
gpt4 key购买 nike

我有一个使用@ConversationScoped 的CDI bean。当我尝试为 Conversation 对象执行 @Inject 时,我得到了一个 NPE。

  @ConversationScoped
@Named("customerbean")
public class CustomerBean implements Serializable {

@Inject
private Conversation conversation;

private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("ba");
private EntityManager em;
private Customer customer;
boolean disabled;

public CustomerBean() {
beginConversation();
customer = new Customer();
em = emf.createEntityManager();
disabled = false;
}

private void beginConversation() {
if (this.conversation.isTransient()) {
this.conversation.begin();
return;
}
throw new IllegalStateException();
}

我在 WEB-INF 目录中有 beans.xml 文件(虽然是空的)。异常看起来像这样:

INFO: Exception when handling error trying to reset the response.
com.google.common.collect.ComputationException: java.lang.RuntimeException: java
.lang.NullPointerException
at com.google.common.collect.ComputingConcurrentHashMap$ComputingMapAdap
ter.get(ComputingConcurrentHashMap.java:397)
at org.jboss.weld.bean.proxy.ClientProxyProvider.getClientProxy(ClientPr
oxyProvider.java:102)
at org.jboss.weld.el.AbstractWeldELResolver.lookup(AbstractWeldELResolve
r.java:115)
at org.jboss.weld.el.AbstractWeldELResolver.getValue(AbstractWeldELResol
ver.java:96)
at org.jboss.weld.environment.servlet.util.ForwardingELResolver.getValue
(ForwardingELResolver.java:49)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67)
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELR
esolver.java:176)

最佳答案

您不得使用 new 创建 CDI bean,也不得将构造函数用于任何类型的初始化逻辑。

这背后的原因是 CDI bean(如 EJB、Spring bean、JSF bean)具有独立的生命周期,并由相关容器管理。您不能依赖于何时(以及多久)调用 new 的“传统”理解。使用生产者创建新的 beans,并使用 @PostConstruct 来创建创建后要执行的任何逻辑。

This应该会给你一个良好的 CDI 开端。欢迎提出更多问题:)

关于java - @Injection 不适用于 CDI bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12368888/

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