0

私はJavaリフレクションを頻繁に使用しており、マップを使用してアプリケーション内の各Beanからのメタデータを格納しています。私はclassNameをキーとして使用しているので、問題は、BeanのclassNameを要求するときに発生することです。

bean.getClass().getName()

Beanが遅延ロードされているかどうかに応じて、2つの異なる結果を得ることができます(一部のリレーションは遅延であり、一部はそうではありませんが、両方で作業したいと思います。

たとえば、クラス:

package com.factorit.beans;<br>
public class Task  implements java.io.Serializable {

通常のロードされたオブジェクトで呼び出された場合、次を返します。

com.factorit.beans.Task

ただし、遅延初期化されたオブジェクトで呼び出された場合は、

com.factorit.beans.Task$$EnhancerByCGLIB$$f9d61939

これを取得する方法があるのか​​、それとも文字列を解析する必要があるのか​​疑問に思いました。

助けやアドバイスをありがとうございました。

編集: いくつかの情報を追加するだけです:私の怠惰な注釈は次のようになります:

@javax.persistence.ManyToOne(fetch = javax.persistence.FetchType.LAZY)

Struts 2.1.8.1、Hibernate 3、Spring2.5.6を使用しています。

4

1 に答える 1

1

struts2-json-plugin 2.1.8.1をデバッグしていた場合、メソッドで、JSONWritter.bean(Object object) この行を使用していることがわかりました

if (clazz.getName().indexOf("$$EnhancerByCGLIB$$") > -1) {

したがって、文字列を解析する必要がある場合でも、これ以上の方法はないと思います。@TomaszNurkiewiczにご協力いただきありがとうございます。

于 2012-10-23T16:17:29.180 に答える