Provider
JDBI を使用して作成された DAO 用にセットアップしようとしています。JDBI はHandle
オブジェクト (JDBC のラッパーConnection
) を使用し、 を使用して DAO を取得できますhandle.attach(MyDaoType.class)
。DAO クラスごとに個別の実装を作成するよりも、次のようにProvider
する方が理にかなっていると思いました。
public class DaoProvider<T> implements Provider<T> {
private final Class<T> daoType;
private final Handle handle;
@Injected
public DaoProvider(Class<T> daoType, Handle handle) {
this.daoType = daoType;
this.handle = handle;
}
@Override
public T get() {
return handle.attach(daoType);
}
}
しかし、これを Guice で結び付けるのは非常に難しいようです。この回答で提案されているように、最初のコンストラクター引数に注釈を使用してみました。次のようなファクトリを定義しました。@Assisted
public interface DAOProviderFactory {
<T> DAOProvider<T> create(Class<T> daoType);
}
FactoryModuleBuilder.implemented
しかし、要点は、プロバイダー クラスを拡張する必要がないということであるため、メソッドを呼び出す方法が明確ではありません。
また、実際に必要なものを返すプロバイダを返すファクトリがあるとは、ちょっとおかしなことにも思えます!
これは Spring DI コンテナーを使用すると非常に簡単に実行できると思うので、Guice を使用するとそれが可能であると信じたいと思います。誰かが私を正しい方向に向けることができますか?