J'essaye de construire une lib simple pour la persistance avec guice persist et d'autres choses.Générique Bind avec Guice
J'ai déjà un AbstractDao<T>
, que je peux facilement étendre et lier l'implémentation concrète comme un boss.
Mais, je veux une sorte de GenericDao, comme ceci:
public abstract class GenericDao<T extends Bean> {
@Inject
private Provider<EntityManager> emp;
protected EntityManager em() {
return emp.get();
}
public AbstractDao() {
}
protected abstract Class<T> clazz();
// ....
Et si j'aurai juste le CRUD (mis en œuvre dans dao abstrait) dans pour certains haricots, je veux injecter GenericDao<SomeBean>
comme un patron .
Alors, j'ai commencé à essayer quelques hacks, et obtenir les suivantes:
public abstract class AbstractPersistentModule extends AbstractModule {
protected <T extends Bean> LinkedBindingBuilder<T> bindGenericDao(final Class<T> clazz) {
return bind(
new TypeLiteral<GenericDao<T>>(){}
)./* what the hell can I do here? */;
}
}
Si je peux le faire fonctionner, je serai capable de faire un simple:
bindGenericDao(Pessoa.class);
Quelqu'un savoir un moyen de le faire?
On ne sait pas d'où vient la véritable implémentation. Pourriez-vous clarifier la question? –
c'est le problème, dans ce cas, l'impl réel fournirait juste la 'Classe', donc, j'essaye de le faire en temps d'exécution en quelque sorte ... –
caarlos0
Mais comment votre classeur sait quelle classe étend 'GenericDao' une manière concrète? C'est mon point ... même si vous connaissiez complètement T, nous ne serions toujours pas au courant d'une implémentation. –