Java 用Guice进行泛型绑定
我试图用guice persist和其他一些东西构建一个简单的持久性库 我已经有了一个Java 用Guice进行泛型绑定,java,guice,Java,Guice,我试图用guice persist和其他一些东西构建一个简单的持久性库 我已经有了一个AbstractDao,可以像boss一样轻松地扩展和绑定具体的实现 但是,我想要一种普通的刀,像这样: public abstract class GenericDao<T extends Bean> { @Inject private Provider<EntityManager> emp; protected EntityManager em() { return e
AbstractDao
,可以像boss一样轻松地扩展和绑定具体的实现
但是,我想要一种普通的刀,像这样:
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();
// ....
有人知道这样做的方法吗?经过大量的尝试,我终于成功了。请看一看,告诉我你的想法:经过大量的破解,我终于成功了。请看一看并告诉我您的想法:我记得焊接是另一种方式,您可以使用@InjectionPoint来表示注入元素的类型
class Foo {
@Inject
private GenericDAO<Employee> dao;
//...
}
..
@Produces
public GenericDAO<T> createDaoInstances(InjectionPoint type){
return new GenericDAO(type.getMember().getSomeThing());
}
public GenericDAO<T>{
//..
public GenericDAO<T>(EntityManager em){
//...
}
class-Foo{
@注入
私人通用道道;
//...
}
..
@产生
公共GenericDAO CreateDAO实例(注入点类型){
返回新的GenericDAO(type.getMember().getSomeThing());
}
公共通用DAO{
//..
公共通用DAO(EntityManager em){
//...
}
}
我认为这是一个更有趣的问题,因为您可以更好地分离组件和层之间的绑定。我记得焊接是另一种方法,您可以使用@InjectionPoint来表示注入元素的类型
class Foo {
@Inject
private GenericDAO<Employee> dao;
//...
}
..
@Produces
public GenericDAO<T> createDaoInstances(InjectionPoint type){
return new GenericDAO(type.getMember().getSomeThing());
}
public GenericDAO<T>{
//..
public GenericDAO<T>(EntityManager em){
//...
}
class-Foo{
@注入
私人通用道道;
//...
}
..
@产生
公共GenericDAO CreateDAO实例(注入点类型){
返回新的GenericDAO(type.getMember().getSomeThing());
}
公共通用DAO{
//..
公共通用DAO(EntityManager em){
//...
}
}
我认为这是一个更有趣的问题,因为您可以更好地分离组件和层之间的绑定。请参见此了解工作实现。请参见此了解工作实现。不清楚真正的实现来自何方。你能澄清这个问题吗?这就是问题所在,在这种情况下,真正的impl只会提供
类
,因此,我试图在执行时以某种方式实现它…但是你的绑定器如何知道哪个类以具体的方式扩展GenericDao
?这就是我的观点。。。即使您在这里完全了解T
,我们仍然不知道实现。我在考虑是否可以创建一个内部类和子注入器或类似的东西。不清楚真正的实现来自何处。你能澄清这个问题吗?这就是问题所在,在这种情况下,真正的impl只会提供类
,因此,我试图在执行时以某种方式实现它…但是你的绑定器如何知道哪个类以具体的方式扩展GenericDao
?这就是我的观点。。。即使您在这里完全了解T
,我们仍然不知道实现。我在想是否可以创建一个内部类和子注入器或类似的东西。如果我没有弄错的话,guice没有这样的注入点
行为。。。这是可悲的,像您的示例这样的实现将更加简单和干净。。。无论如何,谢谢是的caarlos0,但是您不能为EntityManager创建生产者工厂并指定DAO构造函数。这样会更优雅和简单。如果我没有弄错的话,guice没有像这样的注入点
行为。。。这是可悲的,像您的示例这样的实现将更加简单和干净。。。无论如何,谢谢是的caarlos0,但是您不能为EntityManager创建生产者工厂并指定DAO构造函数。这样会更优雅和简单。
class Foo {
@Inject
private GenericDAO<Employee> dao;
//...
}
..
@Produces
public GenericDAO<T> createDaoInstances(InjectionPoint type){
return new GenericDAO(type.getMember().getSomeThing());
}
public GenericDAO<T>{
//..
public GenericDAO<T>(EntityManager em){
//...
}