Guice对象上的类层次结构问题

时间:2012-06-26 12:52:21

标签: reflection guice objectify

我正在尝试使用Guice来实例化我的Objectify DAO。我的层次结构如下:

public class EmpresaDao extends ObjectifyDao<Empresa> { ... }

public class ObjectifyDao<T> extends DAOBase { ... }

当我使用“new EmpresaDao()”时,getClass().getGenericSuperclass()会给我:

[INFO] superclass -> br.com.xxxxx.server.service.ObjectifyDao<br.com.xxxxx.domain.Empresa>

当我使用“injector.getInstance(EmpresaDao.class)”时,getClass().getGenericSuperclass()会给我:

[INFO] superclass -> class br.com.xxxx.server.service.EmpresaDao

显然,我想让Guice用DI实例化我的对象。

有人可以解释为什么会这样吗?

有没有办法(用Guice实例化)获得与“new()”相同的超类?。

感谢。

2 个答案:

答案 0 :(得分:4)

感谢Stuart McCulloch,他帮助了我here

可以禁用AOP(使用Guice whitout AOP),它可以提供我想要的东西(br.com.xxxxx.server.service.ObjectifyDao)(未测试)

但我想在我的工具包上安装AOP,所以我通过从Guice生成的代理类中获取TypeArguments来解决:

        clazz = (Class<T>) ((ParameterizedType) TypeLiteral.get(getClass()).getSupertype(ObjectifyDao.class).getType()).getActualTypeArguments()[0];

答案 1 :(得分:3)

这是因为Guice代理EmpresaDao,动态创建字节码并继承EmpresaDao。