@Singleton @Inject-ed在@WebServlet中似乎创建了多个实例



我有以下@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();
  }
}

我在下面的web servlet中@Inject -ing它们:

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。为什么它们不同?

您应该只在JavaEE 7或更新的服务器上@Inject ejb(例如您的@Singleton bean)。

在Java EE6环境中必须使用@EJB

最新更新