ちょっとやりたいことがあったので、Sparkの初期化処理を調べてたのだけど、かなり複雑です。
忘れないようにシーケンス図を張っておきます。
シーケンス図
登場人物紹介。
Spark
Serviceインスタンスをsingletonで保持し、そのインスタンスのメソッドを呼び出すためのwrapperです。
Service
ルーティングの設定、Serverの初期化などを行います。
EmbeddedServers
組込サーバーのFactoryを管理します。何もしなければEmbeddedJettyFactoryが生成され、管理されます。
EmbeddedServerFactroy(EmbeddedJettyFactory)
EmbeddedServerのfactoryです。
EmbeddedServer(EmbeddedJettyServer)
Jettyなどが提供するServerのadaptorです。
JettyServerFactory(JettyServer)
JettyのServerインスタンスを生成するためのfactoryです。
拡張
事前にEmbeddedServersにEmbeddedServerFactoryを登録しておくことで、独自の処理に差し替えを行うことができます。
public static void main(String[] args) {
EmbeddedServers.add(EmbeddedServers.Identifiers.JETTY, new MyEmbeddedServerFactory(new MyJettyServerFactory())); // 今のところキーを変更することはできないので、第一引数はEmbeddedServers.Identifiers.JETTYを指定する必要があります。
get("/", (request, response) -> "Hello World")
}
Jettyの細かい設定を行う場合は、この辺のクラスを拡張して実装を行う必要があります。