Google guice 3.0 が遂にリリースされた。
JSR-330 サポートで、javax.inject.Inject を使用できるようになったことで、
3.0 で配布される javax.inject.jar をclasspath に通さなくてはならなくなったが、
Constructor Bindings が非常にうれしい。
JSR-330 の javax.inject.Provider を使う場合、今までの
com.google.inject.Provider を使ったときのように、
binder().bind(Ball.class).toProvider(new BallProvider("Red"));
のように書くことはできない。
上記toProvider は、BallProvider が、com.google.inject.Provider をインターフェースにする
場合で、、
javax.inject.Provider をインターフェースにする場合は、
com.google.inject.util.Providers の
public static Provider guicify(javax.inject.Provider provider)
を使うことになる。
import com.google.inject.util.Providers;
:
Injector injector = Guice.createInjector(new AbstractModule(){
@Override
protected void configure(){
binder().bind(Ball.class)
.toProvider(Providers.guicify(new BallProvider("Red")));
}
});
----------------------------------------
import javax.inject.Provider;
public class BallProvider implements Provider<Ball>{
private String color;
public BallProvider(String c){
this.color = c;
}
@Override
public Ball get(){
return new Ball(this.color);
}
}
でも、@Provides が、guice 2.0 からあるわけだし、Provider の指定方法が広がった?