我有一个愚蠢的问题。我有一个java web应用程序和一个rest接口与球衣。我可以在哪里放置代码的初始化块?
例如,我有一个单例,有一个方法"createInstance"。我如何执行"createInstance"方法一旦时间休息服务器正在运行。是否有类似"Main()"的东西来放置初始化的东西?
我在项目中也有servlet,但当用户打开网页时,这些正在执行。
我想知道是否有地方可以放置我的初始化代码
最后我找到了解决办法:
对于执行初始化代码,我可以创建一个"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>
你所说的"初始化对象"是什么意思根本不清楚。我想最明显的答案是在需要的地方初始化对象。
如果你需要创建一个单例,你可以像在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来使用这个Application定义初始化你的REST服务。这个类有一个名为getSingletons()
的方法,您可以扩展它来提供资源的单例。
Rest资源和其他类一样。
你可以使用构造函数初始化你的对象。