如何消除Java 8中的启动依赖?

时间:2016-06-19 07:09:37

标签: java lazy-loading

public class Loader {

  static {
    loadFromDB()
  }
  public static void loadFromDB() {
     String db_host = "127.0.0.1"
     int db_port 27017;
     ObjectStore objectStore = ObjectStore(db_host, db_port);
     objectStore.loadDataIntoMap();
  }
}

public class Main {

   public static void main(String[] args) {
     Server server = new Server(host, port);
     server.serve();
     // I dont want to take db_host and db_port as a command line arguments here
   } 
}

我知道静态块/初始化器在首次引用时会被执行但是在我的Main类中我不想引用Loader类因为我不想创建一个启动依赖项,我的意思是Main类应该能够自行启动而不依赖于与对象存储的连接是否成功,但是Loader需要在服务器按照说法服务第一个客户端请求之前运行一次。

1 个答案:

答案 0 :(得分:0)

静态块是确保在内存中加载类时运行时只运行一次的好方法。 如果要复制该行为,可以使用静态变量。 静态变量也在整个类中共享。应引用单例模式以确保仅将静态变量初始化一次。

模式将是 1.使用静态变量检查初始化是否完成。 2.如果未设置static var,请进入初始化代码。 3.如果需要考虑线程,则使用synchronized块。如果没有,那么可以进行简单的检查。 4.设置静态变量,以便不再运行它。

希望这有帮助。