Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用Guice进行泛型绑定_Java_Guice - Fatal编程技术网

Java 用Guice进行泛型绑定

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

我试图用guice persist和其他一些东西构建一个简单的持久性库

我已经有了一个
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){
   //...
}