0

我问的原因是因为我想知道是否应该将对象声明为字段并在构造函数中对其进行初始化,即使它仅由一种方法使用,或者我应该只在调用方法时在方法内部对其进行初始化

这个

 @Path("/user/")
    public class MyUserResource(){
    UserManager userManager;
    PathManager pathManager;

    MyUserResource(){
        userManager = new userManager();//used by many methods in this class
        pathManager = new PathManager(); // used by only one method in this class
    }
    @GET
    @Path("/getPath")
    public getPath(long id){ // That one method using pathManager
        pathManager.doWork(id)
   }
}

VS这个

public class MyUserResource(){
    UserManager userManager;

    MyUserResource(){
        userManager = new userManager();//used by many methods in this class
        PathManager pathManager = new PathManager(); // used by only one method in this class

    @GET
    @Path("/getPath")
    public getPath(long id){ // That one method using pathManager
        PathManager pathManager = new PathManager(); 
        pathManager.doWork(id)
   }
}

必须创建对象,这需要 JVM 的工作。在第二个示例中,仅在需要该方法时才创建对象,但缺点是它可能每分钟创建 100 次,因为它被大量调用。它也可能根本不需要,但类实例化它 100 次,因为类中的其他方法被调用,就像在第一个示例中一样。但是,如果 GAE 只在实例上创建,那么在构造函数中实例化 PathManager 将是一个更好的选择,但我找不到任何文档来证实这一点

4

1 回答 1

0

默认情况下,资源类的实例是“按请求”创建的。但是,您可以将它们标记为单例,然后一个实例将用于所有请求。为此,您可以使用以下注释:

  • @com.sun.jersey.spi.resource.Singleton泽西岛 1.x (JAX-RS 1.1)
  • @javax.inject.Singleton泽西岛 2.x (JAX-RS 2.0)
于 2013-07-18T18:15:28.923 回答