如何使用jersey(java)初始化rest服务器中的对象?

如何使用jersey(java)初始化rest服务器中的对象?,java,web-applications,jersey,Java,Web Applications,Jersey,我有一个愚蠢的问题。我有一个java web应用程序和一个与jersey的rest接口。在哪里可以放置初始化代码块 例如,我得到了一个带有方法“createInstance”的单例。如何在rest服务器运行时执行一次“createInstance”方法。是否有类似“Main()”的东西来放置初始化内容 我在项目中也有servlet,但是当用户打开网页时,这些servlet正在执行 我想知道是否有任何地方可以放置我的初始化代码。根本不清楚“初始化对象”是什么意思。我想最明显的答案是,你可以在任何需

我有一个愚蠢的问题。我有一个java web应用程序和一个与jersey的rest接口。在哪里可以放置初始化代码块

例如,我得到了一个带有方法“createInstance”的单例。如何在rest服务器运行时执行一次“createInstance”方法。是否有类似“Main()”的东西来放置初始化内容

我在项目中也有servlet,但是当用户打开网页时,这些servlet正在执行


我想知道是否有任何地方可以放置我的初始化代码。

根本不清楚“初始化对象”是什么意思。我想最明显的答案是,你可以在任何需要的地方初始化一个对象

如果您需要创建一个单例,您可以使用静态字段或枚举来创建它,就像在Java中创建任何其他单例一样;您将在一个REST方法中获得它的一个实例。比如说

@GET
@Produces("application/xml")
public String getData() {
   Singleton singleton = Singleton.getInstance();
   String result = singleton.domSomething();
   return result;
}

如果您想要使资源(web服务)成为单例,那么您可以通过扩展javax.ws.rs.core.Application来实现,然后根据您使用的JAX-rs实现和服务器,您可能需要配置web.xml以使用此应用程序定义初始化REST服务。这个类有一个名为
getSingletons()
的方法,您可以扩展它来提供资源的单例。

您根本不清楚“初始化对象”是什么意思。我想最明显的答案是,你可以在任何需要的地方初始化一个对象

如果您需要创建一个单例,您可以使用静态字段或枚举来创建它,就像在Java中创建任何其他单例一样;您将在一个REST方法中获得它的一个实例。比如说

@GET
@Produces("application/xml")
public String getData() {
   Singleton singleton = Singleton.getInstance();
   String result = singleton.domSomething();
   return result;
}

如果您想要使资源(web服务)成为单例,那么您可以通过扩展javax.ws.rs.core.Application来实现,然后根据您使用的JAX-rs实现和服务器,您可能需要配置web.xml以使用此应用程序定义初始化REST服务。这个类有一个名为
getSingletons()
的方法,您可以扩展它来提供资源的单例。

Rest资源与任何其他类一样。

您可以使用构造函数初始化对象。

Rest资源与任何其他类一样。

您可以使用构造函数初始化对象。

最终我找到了解决方案:

对于执行初始化代码,我可以创建“ServletContextListener”的实现

我这样做:

package foopackage;

...
public class ServletContextClass implements ServletContextListener
{  

    @Override
    public void contextInitialized(ServletContextEvent arg0) 
    {        
            ...     
    }


    @Override
    public void contextDestroyed(ServletContextEvent arg0) 
    {
           ...
    }
}
要在应用程序服务器初始化后使用此侦听器,必须将其放入web.xml中

 <listener>
     <listener-class>foopackage.ServletContextClass</listener- class>
 </listener>

foopackage.ServletContextClass

我终于找到了解决方案:

对于执行初始化代码,我可以创建“ServletContextListener”的实现

我这样做:

package foopackage;

...
public class ServletContextClass implements ServletContextListener
{  

    @Override
    public void contextInitialized(ServletContextEvent arg0) 
    {        
            ...     
    }


    @Override
    public void contextDestroyed(ServletContextEvent arg0) 
    {
           ...
    }
}
要在应用程序服务器初始化后使用此侦听器,必须将其放入web.xml中

 <listener>
     <listener-class>foopackage.ServletContextClass</listener- class>
 </listener>

foopackage.ServletContextClass

不是,单身对我无效。我知道那是存在的。原因是“getInstance”花费的时间太长。我想在rest服务器完成初始化后,在向客户端打开web服务之前,执行一些初始化代码。我知道那是存在的。原因是“getInstance”花费的时间太长。我想在rest服务器完成初始化后,在向客户端打开web服务之前,执行一些初始化代码。不,对不起。在向外部打开web服务之前,我需要初始化一些对象。您可以创建一个所有资源都将扩展的类,该类的初始化代码将位于某个静态块或其他位置。不,抱歉。在向外部打开web服务之前,我需要初始化一些对象。您可以创建一个所有资源都将扩展的类,该类将在一些静态块或其他地方包含初始化代码。