静态服务中返回数据源的静态方法

时间:2019-01-24 09:04:28

标签: java database static jersey

我在宁静的项目中像下面那样设计了连接工厂类,但是在网上和stackoverflow中浏览了几篇文章后,对static关键字的用法感到困惑。请帮助我澄清我对此设计的怀疑,是好是坏。

public class ConnectionFactory{
public Connection lookupConnection(){
//lookup datasource from application server
return connection;
}
}

在我的REST资源类中,对通过ConnectionFactory对象获得的连接对象进行一些操作

@Path("/mypath")
public class RestSample{

public Response updateDetails(MyObj obj)
{
   Connection conn=new ConnectionFactory().lookupConnection();
   return conn.doSomeOperation();
}
}

我知道这在多线程环境中可以很好地工作,但是我是否不必要为每个请求创建ConnectionFactory对象?我应该改为将方法lookupConnection设为静态,并使用类名称ConnectionFactory进行引用,因为该方法未引用任何全局变量吗?当许多用户调用该服务时,这不会引起任何并发问题吗?

1 个答案:

答案 0 :(得分:0)

您可以将lookupConnection声明为static,我不希望这样做。
我希望使用一种称为Singleton的设计模式:

public class ConnectionFactory{
private ConnectionFactory conFactory;

//prevent instanciation from outside
private ConnectionFactory() {}

public static synchronized getFactory() {
  if(ConnectionFactory.conFactory == null) { ConnectionFactory.conFactory = new ConnectionFactory(); }
  return ConnectionFactory.conFactory;
}

//methods of object are non-static
}

此类是线程安全的。请注意synchronized,您需要它,因为对象创建不是JVM中的原子操作。 通过从代码中的任何位置调用ConnectionFactory.getFactory()来访问Factory。该方法将为您提供一个对象(如果尚未创建)。

相关问题