在哪里实例化该类

时间:2012-04-23 20:22:58

标签: java java-ee

我有一个简单的.java类。在该课程中,我使用Timer课程计划方法来安排任务。

问题是我正在使用Java EE应用程序,我不知道在哪里实例化这个类;从Servlet或类似的东西?我想在我的应用程序启动时只实例化一次该类。

3 个答案:

答案 0 :(得分:4)

您可能需要ServletContextListener及其方法contextInitialized(..)。初始化应用程序时,它会被调用一次。

您可以在web.xml

中使用@WebListener<listener><listener-class>..</...>映射侦听器

答案 1 :(得分:1)

 public class YourServlet extends HttpServlet {
 private YourClass instance;

 public void init() throws ServletException {
      instance = new YourClass();
 }
 //code
 }

通过在init方法中实例化您的类,您将确保您的类只被实例化一次,因为在Java EE应用程序中,Servlet只被加载到服务器内存中一次。

答案 2 :(得分:0)

在Quartz中 - 一种流行的调度程序 - 通常的做法是在Servlet的init方法中配置Jobs,并将load-on-startup属性设置为true:

this article开始,在web.xml中你应该这样做:

<servlet>
    <servlet-name>QuartzInitializer</servlet-name>
    <display-name>Quartz Initializer Servlet</display-name>
    <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

然后在您的servlet中配置Jobs:

public class QuartzServlet extends GenericServlet {
    public void init(ServletConfig config) throws ServletException {
    super.init(config);
    // And continue with your configuration

PS:我强烈建议您使用Quartz