Google Guice で system property の値を inejct したい

Names.bindProperties 使おう!

任意の Module の中で以下のように設定する。

@Override
protected void configure() {
	final HashMap<String, String> props = new HashMap<>();

	// Put default values
	props.put("jetty.port", "8080");

	for (final Entry<Object, Object> entry : System.getProperties().entrySet()) {
		props.put(entry.getKey().toString(), entry.getValue().toString());
	}

	Names.bindProperties(binder(), props);
}

で、以下のようにできる~

@Provider
public Server provideServer(@Named("jetty.port") int port) {
    // ...
}

int や boolean 等の組み込み型を指定した場合、guice がいい感じに変換してくれます。

Published: 2015-05-07(Thu) 23:24