guice 3.0 で ThrowingProvider が非奨励になってる

Google guice 2.0 の時に、Provider の定義で T get() で例外が発生するケースのために、
com.google.inject.throwingproviders.ThrowingProvider が存在した。

Google guice 3.0
では、この ThrowingProvider 、@deprecated になり使用が
奨励されなくなった。
代わりに com.google.inject.throwingproviders.CheckedProvider を継承したインターフェースを
Modulle バインド定義に使う方法が提示された。

例えば、すべての例外に対応して CheckedProvider を継承して以下のように、
用意する。

import com.google.inject.throwingproviders.CheckedProvider;

public interface GeneralProVider<T> extends CheckedProvider<T>{
   @Override
   public T get() throws Exception;
}
-----------------------------------------------------
インジェクタ、バインド定義は、、

Injector injector = Guice.createInjector(new AbstractModule(){
   @Override
   protected void configure(){
      ThrowingProviderBinder.create(binder())
      .bind(GeneralProVider.class , Foo.class)
      .to(FooProvider.class);
   }
});
Sample s = injector.getInstance(Sample.class);
s.exec();
-----------------------------------------------------
import java.util.Properties;

public class FooProvider implements GeneralProVider<Foo>{
   @Override
   public Foo get() throws Exception{

      Properties prop = new Properties();
      prop.load(ClassLoader.getSystemResourceAsStream("foo.properties"));
      return new FooImpl(prop);
   }
}
-----------------------------------------------------
public interface Foo{
   public String getValue(String key);
}

-----------------------------------------------------
import java.util.Properties;

public class FooImpl implements Foo{
   private Properties prop;
   protected FooImpl(Properties prop){
      this.prop = prop;
   }
   @Override
   public String getValue(String key){
      return this.prop.getProperty(key);
   }
}

-----------------------------------------------------
class Sample{
   @Inject FooProvider provider;
   public void exec(){
      try{
      Foo foo = this.provider.get();
      String v = foo.getValue("Foo");
      System.out.println("v = "+v);
      }catch(Exception e){
         e.printStackTrace();
      }
   }
}