問題タブ [cglib]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1672 参照

json - GsonがSpringBeanをシリアル化する

WebSphere6.1のJavaWebアプリにGson1.6SpringFramework3.0を使用しています。実際のインスタンスがCGLIBプロキシであるSpringBeanがいくつかあります。Gsonを介してこれらのBeanをシリアル化しようとすると、クラスの非プリミティブプロパティがシリアル化されません。代わりに、次のようになります。

もっと似たようなものを期待していたところ

プロキシされていないPOJOをシリアル化すると、出力は期待どおりになります。Gsonに期待する出力を生成させるにはどうすればよいですか?

0 投票する
3 に答える
7369 参照

maven - Maven-アーティファクトの解決に失敗しました-cglib:cglib-nodep:jar:null

大規模なプロジェクトをビルドしようとしていますが、次のエラーで失敗します。

Mavenの経験が不足しているため、インターネットからのフェッチに失敗するのではなく、ビルドプロセスでこのファイルcglib-nodep-2.1_3.jar
を使用する方法がわかりません(おそらく)。

0 投票する
1 に答える
404 参照

java - 実行時にクラスを生成するために選択するライブラリ

特にクラスの状態に加えられた変更を検出するために、実行時にクラスを拡張する必要があります。可能であれば、フィールドの割り当てをインターセプトすることで変更を検出できるようにしたいと考えています。そうでない場合は、セッターをインターセプトしても問題ありません。どのライブラリを使用する必要があり、その理由は? javassist または cglib または ? これは java.lang.reflect.Proxy で可能ですか? これらのライブラリを比較できますか? ありがとう。

0 投票する
1 に答える
1391 参照

java - cglib - MethodInterceptor & ファイナライズ?

cglib を使用MethodInterceptorしてサービスをラップします。サービスへの各呼び出しでは、データ セッションを開き、呼び出しをサービスに渡し、最後にセッションを閉じます。

ただし、から呼び出すと動作がおかしいことに気付きましたFinalizer。次のスタックトレースを取得します。

私は何を間違っていますか?どうすれば解決できますか?

0 投票する
2 に答える
1767 参照

spring - Spring で、POJO の CGLib の行番号が失われるのはなぜですか?

Spring MVC Web アプリ:

行番号のないスタック トレースがあります (下部に表示)。

これは、コントローラーで実行されている CGLib が原因であると推測されます。しかし、これは私には奇妙です。実際の例外はServerBatchRemoteRequestAcceptor、コントローラーではなく、注入されていない pojo で発生します。Controller オブジェクトでのみ作成されます。

例:


誰かが私にこの振る舞いを説明できますか? CGLib が原因で、コントローラーの下のすべての呼び出しに回線番号がなくなりますか?

プロキシが使用されるように、コントローラをインターフェイスに書き込む必要がありますか? それは正常ですか?私はサービスのためにそれを行いますが、コントローラーは単純な POJO として行いました。

0 投票する
3 に答える
7908 参照

java - メソッドのパラメーター注釈を保持する動的プロキシを Java で作成するにはどうすればよいですか?

現在、Hibernate Validator のメソッド検証サポートを使用できるようにするために、いくつかの既存の JAX/RS リソースをプロキシしようとしています。ただし、クラス (現在は cglib 2.2 を使用) をプロキシすると、プロキシ クラスのパラメーターに FormParam 注釈が存在しないため、JAX/RS ランタイム (apache wink) はパラメーターを設定しません。これを示すテストコードを次に示します。

これにより、次の出力が得られます。

他の選択肢はありますか?

0 投票する
1 に答える
412 参照

java - CGLIB で作成されている場合、オブジェクトを EJB に送信すると null になる

クライアント層でオブジェクト (SERIALIZABLE オブジェクト) へのプロキシを作成し、このオブジェクトを EJB に送信します (Weblogic 10.3.4 サーバーで EJB 3.0 を使用)。EJB では、パラメータが null です。送信しているオブジェクトがクライアントで null でないこと、およびそれがシリアライズ可能であることを確認しました (System.out.println(c instanceof Serializable) は true を出力しました)。何が問題なのですか?

クライアントでのオブジェクトの作成:

0 投票する
3 に答える
3597 参照

java - JavaAndroidでクラスを動的に編集/作成する

実行時にクラスを動的に定義し、Androidでインスタンス化する方法を探しています。私の理解では、これはすでにAndroidで行われているので、それを理解するのに少し助けが必要です。

JavascriptとPHPで同様の結果を得ることができます。ASM、BCEL、CGlibなどを使用してJavaで実行できることはわかっています。ただし、Androidで動作するかどうかを理解するには、これらのいずれについても十分に理解していません。または、それらが機能する中で、どのような影響がありますか?

仮に、3つすべてがAndroidで機能する場合、どちらを使用するか、どのように使用するかを理解し始める場所について、誰かが私に正しい方向を示すことができますか?

私はJavaプログラミングをあまり行っていません。また、AndroidでJavaプログラミングを使用しているのはつい最近のことです。そのため、入手できるすべてのヘルプ/修正に感謝しています。そうは言っても、あなたの答えが単純ではない場合、私は感謝します:これをしないでください。私はこれを正しく行う方法ではなく、具体的に行う方法を探しています。少なくとも、私のアプリがクラッシュするまでは。:)

これは、Androidで次の状況ですでに発生していると思います:( 100%確実ではありません)

JSONからオブジェクトを作成します。AIDL

0 投票する
3 に答える
8847 参照

java - Javaはクラスがプロキシであるかどうかを検出します

クラスがプロキシ動的cglibなど)であるかどうかを検出することは可能ですか?

クラスAB作成し、共通のインターフェースを実装しましょうIclassEquals次に、署名のルーチンを定義する必要があります

またはの場合にのみtrueと評価されるようになります。ここで、はタイプ(dynamic、cglib、またはその他)の動的プロキシを示します。a.equals(b)Proxy(a).equals(b)Proxy(a)A


の助けを借りて@Jigar Joshi、これはこれまでのように見えます:

問題は、たとえばCGLIBプロキシを検出しないことです。

0 投票する
2 に答える
9067 参照

spring - Spring 内での JDK と CGLIB プロキシの混合

Spring で実行するアプリケーションがあり、いくつかの場所で AOP を使用しています。インターフェイス レベルで @Transactional アノテーションを使用したいので、Spring が JDK プロキシを作成できるようにする必要があります。したがって、proxy-target-classプロパティを true に設定しません。一方で、アドバイスが欲しいクラスごとにインターフェースを作成したくはありません。インターフェースが意味をなさない場合は、実装だけが必要であり、Spring は CGLIB プロキシを作成する必要があります。

私が説明したように、すべてが完璧に機能していました。しかし、私は他のいくつかの注釈 (私が作成した) をインターフェースに入れて、実装クラスによって「継承」されたいと思っていました (@Transactional のように)。SpringのAOPの組み込みサポートではそれができないことが判明しました(少なくとも、いくつかの調査の後、それを行う方法を理解できませんでした。インターフェースの注釈は実装クラスでは表示されません。したがって、そのクラスはアドバイスを受けません)。

そこで、独自のポイントカットインターセプターを実装して、他のメソッド アノテーションをインターフェイスに追加できるようにすることにしました。基本的に、私のポイントカットはメソッドのアノテーションを探し、見つからないまで、クラスまたはそのスーパークラスが実装するインターフェースの同じメソッド (同じ名前とパラメーターの型) を探します。

問題は、このポイントカット/インターセプターを適切に適用する DefaultAdvisorAutoProxyCreator Bean を宣言すると、インターフェイスを持たないアドバイス クラスの動作が壊れてしまうことです。どうやら何かがうまくいかず、Spring は私のクラスを 2 回 (CGLIB で 1 回、次に JDK で) プロキシしようとします。

これは私の構成ファイルです:

これは私がプロキシしたいクラスで、インターフェイスはありません:

次のように、他のBeanで自動配線しようとすると:

次の例外が発生します。

これは、Spring 出力の一部の行です。

誰かがそれが役立つと思うなら、私は完全な出力を提供することができます. Spring がクラスを「ダブルプロキシ」しようとする理由と、DefaultAdvisorAutoProxyCreator Bean を宣言したときにこれが発生する理由がわかりません。

私はこれにしばらく苦労してきましたが、助けやアイデアがあれば大歓迎です。

編集:

これは、要求されたインターセプターのソース コードです。基本的に、メソッドの実行をログに記録します (@Trace で注釈が付けられたメソッドのみがインターセプトされます)。メソッドに @Trace(false) のアノテーションが付けられている場合、メソッドが戻るまでロギングは中断されます。

ありがとう!