我正在尝试使用 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 ()”相同的父类(super class)?
谢谢。
最佳答案
感谢帮助我的 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];
关于reflection - Guice 对象上的类层次结构问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11207729/