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 を使用してオブジェクトをインスタンス化させたいと考えています。

誰かがなぜこれが起こるのか説明できますか?

"new ()" と同じスーパークラスを取得する (Guice でインスタンス化する) 方法はありますか?

ありがとう。

4

2 に答える 2

4

ここで私を助けてくれたStuartMcCullochに感謝します

AOPを無効にすることができます(AOPなしでGuiceを使用)。これにより、必要なものが得られます(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 に答える