2011-09-14 8 views
3
  • こんにちは! 今日、私は最適化の種類について考え、いくつかの質問を持っている...

コンテキスト:私は私のWebアプリケーションでGuiceの2Guiceによるレジストリ最適化


使用してJavaで開発してい 、私は特定のタイプにその場で変換するコンバータのレジストリを持っています。次のようにコンバータが記述されている:

public class StringToBoolean implements Converter<String, Boolean> 
{ 

    @Override 
    public Boolean convert(String from) 
    { 
     return Boolean.valueOf(from); 
    } 

} 

私のレジストリは、地図に他ならない。

public class ConverterRegistryImpl implements ConverterRegistry 
{ 

    private Map<Key,Converter<?,?>> converterRegistry = new HashMap<Key, Converter<?,?>>(); 

    @Override 
    public <F, T> void register(Class<F> fromType, Class<T> toType, Converter<F, T> converter) 
    { 
     converterRegistry.put(new Key(fromType,toType), converter); 
    } 

} 

最後に、私は私のレジストリに私のコンバータを登録する(クラス:ServletModule:configureServlets ())
私はこのステップを最適化できると思います...

このように3210
ConverterRegistryImpl registry = new ConverterRegistryImpl(); 
registry.register(String.class, Integer.class, new StringToInteger()); 
registry.register(String.class, Boolean.class, new StringToBoolean()); 
... 
//Then I bind the registry to this current instance... 
bind(ConverterRegistry.class).toInstance(registry) 

私はこのようにどこにでもそれを使用することができます:

@Inject 
ConverterRegistry converter; 

  • まあ、私はこの使用のGuiceを実施するための最良の方法を探しています。
  • より一般的に、あなたはどのようにしてGuiceとのレジストリを構築しましたか?

ありがとうございます!

+0

フム、Guiceののないバージョン1.2がありません... –

+0

はい、私が作ります間違い。私はバージョン2を使用しています。 – Jarod

答えて

2

"最適化"とは正確に何を意味するのかわかりません。あなたのアプローチの欠点の1つは、コンバーターとレジストリを手作業で作成するため、依存関係インジェクションの利点を使用しないことです。また、異なるモジュールからコンバータを累積することもできません。

これはGuiceのためにmultibindings拡張子で固定することができます:http://code.google.com/p/google-guice/wiki/Multibindings

Injector injector = Guice.createInjector(new Module() { 
     @Override 
     public void configure(Binder binder) { 
      @SuppressWarnings("rawtypes") 
      Multibinder<Converter> converterBinder = Multibinder.newSetBinder(binder, Converter.class); 
      converterBinder.addBinding().to(StringBooleanConverter.class); 
      converterBinder.addBinding().to(BooleanStringConverter.class); 
     } 
    }); 
    ConverterRegistryImpl registry = injector.getInstance(ConverterRegistryImpl.class); 

完全なコードがでavaliableである:https://gist.github.com/1217563

+0

Ok、特定のコンバータを取得します。私はそれが2つのタイプ(タイプ&タイプから)変換することができる場合は、各コンバータを確認する必要がありますか? – Jarod

+0

いいえ、私はあなたのメソッドをセッターで使用しました: void register( fromType、Class toType、Converter converter –

+0

オハイオ州ok!マップを維持する必要がありますか、各コンバータをチェックする方が良いでしょうか? !それは良い解決策です - 私は私のプロジェクトを更新します。ありがとうございました ! – Jarod