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