3

我正在尝试使用 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 ()”相同的超类?

谢谢。

4

2 回答 2

4

感谢 Stuart McCulloch,他在这里帮助了我

可以禁用 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];
于 2012-06-26T19:09:14.997 回答
3

发生这种情况是因为 Guice 通过动态创建字节码并从 EmpresaDao 继承来代理 EmpresaDao。

于 2012-06-26T13:52:56.900 回答