初始化实例化变量
问题描述:
假设我有一个servlet的初始化方法中实例化的EntityManagerFactory的引用:初始化实例化变量
StartServlet.java:
@WebServlet("/start")
public class StartServlet extends HttpServlet {
private EntityManagerFactory factory;
@Override
public void init() {
factory = Persistence.createEntityManagerFactory("jpa");
getServletContext().setAttribute("factory", factory);
}
}
这也是我对所有其他servlet做可见内“容器”。现在,让我们说,我想在另一个servlet访问此引用,如:
AnotherServlet.java:
@WebServlet("/another")
public class AnotherServlet extends HttpServlet {
private EntityManagerFactory factory;
@Override
public void init() {
factory = (EntityManagerFactory) getServletContext().getAttribute("factory");
if(factory == null) {
//factory not instantiated from StartServlet, what to do?
}
}
}
我该怎么做,如果它不是来自StartServlet.java实例化(初始化还没有被调用的)?希望我的问题足够精确!
-Superdids
答
不要依赖Servlet
初始化servlet容器的数量级上。
相反,做初始化的ServletContextListener
.
+0
啊,谢谢! – Superdids 2014-09-30 17:48:00
你需要在['ServletContextListener'(http://www.mkyong.com/servlet/what-is-listener-servletcontextlistener创建你的'factory' -example /),而不是在servlet中。尽管理想情况下它将由一个像Spring这样的DI框架创建并自动注入。 – 2014-09-30 16:12:43
Java EE为这项工作提供EJB。 – BalusC 2014-09-30 16:29:09