Java Spark で Guice を使用するのは非常に簡単です。SparkFilter
基本的に、Guice インジェクターを作成するには、次の方法でを拡張する必要があります。
public class SparkGuiceFilter extends SparkFilter {
private Injector injector = null;
@Override
protected SparkApplication[] getApplications(final FilterConfig filterConfig) throws ServletException {
final SparkApplication[] applications = super.getApplications(filterConfig);
if (this.injector == null) {
this.injector = Guice.createInjector(new MainModule());
}
if (applications != null && applications.length != 0) {
for (SparkApplication application : applications) {
this.injector.injectMembers(application);
}
}
return applications;
}
}
次に、 Jetty またはその他のサーブレット コンテナーを使用しweb.xml
て、Spark アプリケーションを通常のアプリケーションとして実行する必要があります。war
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<filter>
<filter-name>SparkGuiceFilter</filter-name>
<filter-class>com.devng.spark.guice.SparkGuiceFilter</filter-class>
<init-param>
<param-name>applicationClass</param-name>
<param-value>com.devng.spark.SparkApp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SparkGuiceFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
ただし、このアプローチにはいくつかの制限があります。Guice でリクエスト ベースまたはセッション スコープを使用することはできません。これが必要ない場合は、問題ありません。それ以外の場合は、公式の Guice ドキュメントで説明されているように、Guice サーブレット拡張機能を統合GuiceFilter
してを追加する必要があります。また、とで同じインジェクター インスタンスを使用していることを確認する必要があります。web.xml
GuiceFilter
SparkGuiceFilter
GuiceServletContextListener
web.xml
ここの私の GitHub で完全に機能する例を見つけることができますhttps://github.com/devng/demo/tree/master/sparkjava-guice