問題タブ [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.
json - GsonがSpringBeanをシリアル化する
WebSphere6.1のJavaWebアプリにGson1.6とSpringFramework3.0を使用しています。実際のインスタンスがCGLIBプロキシであるSpringBeanがいくつかあります。Gsonを介してこれらのBeanをシリアル化しようとすると、クラスの非プリミティブプロパティがシリアル化されません。代わりに、次のようになります。
もっと似たようなものを期待していたところ
プロキシされていないPOJOをシリアル化すると、出力は期待どおりになります。Gsonに期待する出力を生成させるにはどうすればよいですか?
maven - Maven-アーティファクトの解決に失敗しました-cglib:cglib-nodep:jar:null
大規模なプロジェクトをビルドしようとしていますが、次のエラーで失敗します。
私はMavenの経験が不足しているため、インターネットからのフェッチに失敗するのではなく、ビルドプロセスでこのファイルcglib-nodep-2.1_3.jar
を使用する方法がわかりません(おそらく)。
java - 実行時にクラスを生成するために選択するライブラリ
特にクラスの状態に加えられた変更を検出するために、実行時にクラスを拡張する必要があります。可能であれば、フィールドの割り当てをインターセプトすることで変更を検出できるようにしたいと考えています。そうでない場合は、セッターをインターセプトしても問題ありません。どのライブラリを使用する必要があり、その理由は? javassist または cglib または ? これは java.lang.reflect.Proxy で可能ですか? これらのライブラリを比較できますか? ありがとう。
java - cglib - MethodInterceptor & ファイナライズ?
cglib を使用MethodInterceptor
してサービスをラップします。サービスへの各呼び出しでは、データ セッションを開き、呼び出しをサービスに渡し、最後にセッションを閉じます。
ただし、から呼び出すと動作がおかしいことに気付きましたFinalizer
。次のスタックトレースを取得します。
私は何を間違っていますか?どうすれば解決できますか?
spring - Spring で、POJO の CGLib の行番号が失われるのはなぜですか?
Spring MVC Web アプリ:
行番号のないスタック トレースがあります (下部に表示)。
これは、コントローラーで実行されている CGLib が原因であると推測されます。しかし、これは私には奇妙です。実際の例外はServerBatchRemoteRequestAcceptor
、コントローラーではなく、注入されていない pojo で発生します。Controller オブジェクトでのみ作成されます。
例:
誰かが私にこの振る舞いを説明できますか? CGLib が原因で、コントローラーの下のすべての呼び出しに回線番号がなくなりますか?
プロキシが使用されるように、コントローラをインターフェイスに書き込む必要がありますか? それは正常ですか?私はサービスのためにそれを行いますが、コントローラーは単純な POJO として行いました。
java - メソッドのパラメーター注釈を保持する動的プロキシを Java で作成するにはどうすればよいですか?
現在、Hibernate Validator のメソッド検証サポートを使用できるようにするために、いくつかの既存の JAX/RS リソースをプロキシしようとしています。ただし、クラス (現在は cglib 2.2 を使用) をプロキシすると、プロキシ クラスのパラメーターに FormParam 注釈が存在しないため、JAX/RS ランタイム (apache wink) はパラメーターを設定しません。これを示すテストコードを次に示します。
これにより、次の出力が得られます。
他の選択肢はありますか?
java - CGLIB で作成されている場合、オブジェクトを EJB に送信すると null になる
クライアント層でオブジェクト (SERIALIZABLE オブジェクト) へのプロキシを作成し、このオブジェクトを EJB に送信します (Weblogic 10.3.4 サーバーで EJB 3.0 を使用)。EJB では、パラメータが null です。送信しているオブジェクトがクライアントで null でないこと、およびそれがシリアライズ可能であることを確認しました (System.out.println(c instanceof Serializable) は true を出力しました)。何が問題なのですか?
クライアントでのオブジェクトの作成:
java - JavaAndroidでクラスを動的に編集/作成する
実行時にクラスを動的に定義し、Androidでインスタンス化する方法を探しています。私の理解では、これはすでにAndroidで行われているので、それを理解するのに少し助けが必要です。
JavascriptとPHPで同様の結果を得ることができます。ASM、BCEL、CGlibなどを使用してJavaで実行できることはわかっています。ただし、Androidで動作するかどうかを理解するには、これらのいずれについても十分に理解していません。または、それらが機能する中で、どのような影響がありますか?
仮に、3つすべてがAndroidで機能する場合、どちらを使用するか、どのように使用するかを理解し始める場所について、誰かが私に正しい方向を示すことができますか?
私はJavaプログラミングをあまり行っていません。また、AndroidでJavaプログラミングを使用しているのはつい最近のことです。そのため、入手できるすべてのヘルプ/修正に感謝しています。そうは言っても、あなたの答えが単純ではない場合、私は感謝します:これをしないでください。私はこれを正しく行う方法ではなく、具体的に行う方法を探しています。少なくとも、私のアプリがクラッシュするまでは。:)
これは、Androidで次の状況ですでに発生していると思います:( 100%確実ではありません)
JSONからオブジェクトを作成します。AIDL
java - Javaはクラスがプロキシであるかどうかを検出します
クラスがプロキシ(動的、cglibなど)であるかどうかを検出することは可能ですか?
クラスA
をB
作成し、共通のインターフェースを実装しましょうI
。classEquals
次に、署名のルーチンを定義する必要があります
またはの場合にのみtrueと評価されるようになります。ここで、はタイプ(dynamic、cglib、またはその他)の動的プロキシを示します。a.equals(b)
Proxy(a).equals(b)
Proxy(a)
A
の助けを借りて@Jigar Joshi
、これはこれまでのように見えます:
問題は、たとえばCGLIBプロキシを検出しないことです。
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) のアノテーションが付けられている場合、メソッドが戻るまでロギングは中断されます。
ありがとう!