查询在java中模拟全局变量

我有一个问题,我想这对大多数人来说都是微不足道的。 但是,这里 – 我有一个连接到数据库以读取特定信息的应用程序。 现在,这个读取在每个请求的基础上发生在应用程序的许多类中。 所以我想将每个请求的数据库连接数限制为1 。 所以这就是我所做的。

假设我有一个数据库访问类,DBAccess获取2个字符串,a&b。

我写了一个Global类,如下所示 –

public class Global { static String a; static String b; public Global(DBAccessInput input) throws Exception { super(); DBAccess dbtool= new DBAccess(input); a=dbtool.getA(); b=dbtool.getB(); } } 

所以现在我可以继续在整个应用程序的其他类中访问a&b作为Global.a和Global.b。 但这对我来说似乎是错误的,因为填充a&bi需要实例化Global的对象然后我将回退到访问a&b为Global.a,同样为b。 我可以把Global构造函数中的所有东西放到一个静态块中但是仍然没有帮助,因为我仍然需要实例化Global的一个对象以将“输入”传递给DBAccess。

任何正确方向的帮助或指示都会有很大帮助。

您可以在全局的静态方法中实例化那些静态变量,而不是构造函数但是这不是一个好的样式:

 static initialize(DBAccessInput input) { a = ... b = ... } 

您不必实例化Global来访问其静态成员。 静态成员可以通过类名访问,而不需要任何对象。 所以你的方法是合理的。

处理“全局”对象有以下常见做法。

  1. 静态成员(几乎是你的方法)
  2. 单身人士模式
  3. 线程本地。

如果我是你,我会创建DBAccess单例,这样你就可以访问数据库了: DBAccess.getInstance().find("the query")

顺便说一下,看看已经实现了DB访问层的工具。 例如iBatis,Hibernate,JPA。