0

軽量 DI 用に Google Guice3.0 を試しています。プロパティを読み取って Class 型に変換し、クラスに注入したいと考えています。これが私のコードです。

setting.properties
port = 31200
handler=com.mypackage.handler.MyHandler

Module
public class MyModule extends AbstractModule {

    @Override
    protected void configure() {
        Properties properties = new Properties();
        try {
            properties.load(getClass().getResourceAsStream("setting.properties"));
            Names.bindProperties(binder(), properties);

        } catch (IOException e) {
            e.printStackTrace();
        } 

    }

}

@Singleton
public class MyServer {

     @Inject @Name("port") int port;

     @Inject @Name("handler") Class<? extends BaseHandler> handlerClass; 
}

public interface BaseHanlder {
   //
}

public MyHandler implements BaseHandler {
  //
}

ハンドラー プロパティをプロパティからクラスに変換し、MyServer に注入したいと考えています。どうすれば達成できますか?

前もって感謝します。

4

1 に答える 1

3

@gontardが言ったように、Guiceにはクラスのコンバーターが既に含まれているため、これは機能します。

Class.forName(fqn) を使用して Class を取得します。

Pluggable Type Convertersを使用して他のカスタム コンバーターを追加できます。Binder#convertToTypes を参照してください。

デフォルトでは、すべてのプリミティブ型、列挙型、およびクラスのコンバーターがあります。実装の詳細については、こちらを参照してください。

于 2013-03-15T13:34:41.463 に答える