【发布时间】:2015-05-20 20:08:39
【问题描述】:
我有以下@Singleton EJB:
@Singleton
public class RunBean {
private int id = new Random().nextInt();
public void printID() {
System.out.println("ID = " + id);
}
}
@Singleton
public class ParentBean {
@Inject
private RunBean runBean;
public void start() {
runBean.printID();
}
}
我是@Inject-ing 他们在下面的 web servlet 中:
public class Servlet extends HttpServlet {
@Inject
private RunBean runBean;
@Inject
private ParentBean parentBean;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
runBean.printID(); // out: ID = 69743
parentBean.start(); // out: ID = 193
}
}
我希望看到打印的 ID 相同。为什么它们不同?
【问题讨论】:
-
那是
@javax.ejb.Singleton吗? -
是的,那是什么注释类。
-
我怀疑你可能是 CDI 怪癖的受害者:要么只使用
@EJB将你的单例注入任何地方(而不是@Inject),要么将@ApplicationScoped添加到你的@Singletons 和继续使用@Inject -
好的,谢谢。 RunBean 是
javax.inject.Singleton。但是ParentBean是com.google.inject.Singleton(这个实现需要用到库)。所以我不能在com.google.inject.Singleton中注入 CDI Singleton?但我需要他在那里。我应该怎么做才能得到豆子?使用new initialcontext().lookup? -
您是否将应用程序部署在 Java EE 容器上?还是您使用 3rd 方库进行注入(例如:guice)?
标签: jakarta-ee singleton ejb cdi