問題タブ [javassist]

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 投票する
1 に答える
362 参照

java - 実行時の Java オブジェクトの拡張

プロキシ対応ライブラリ (javassist、JDK 動的プロキシなど) を使用すると、実行時にインターフェイスを実装するようにクラスを拡張できることを認識しています。

私の質問は次のとおりです。インスタンス化されたオブジェクトを拡張して、実行時にインターフェイスを実装することは可能ですか (同様に、適切なメソッド ハンドラーを提供します)。

0 投票する
4 に答える
13297 参照

java - Javassist。主なアイデアと実際の用途は何ですか?

Javassist は、アプリケーションの Java バイトコードを操作する手段を提供する Java ライブラリです。

わかりましたが、なぜバイトコードを操作する必要があるのでしょうか?

実際の例はありますか?javassistが使用した実際のアプリはありますか?

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

java - Javassistでメソッド本体を変更した後、なぜ.toClass()を呼び出さなければならないのですか?

getMessage()私はJavassistによって私のメソッド本体を次のように変更TestClassします:

それはうまくいきます。ただし、ctClass.toClass()メソッド呼び出しを削除すると、本文の置換が機能しません。なんで?

getMessage()メソッドの本体を正しく置き換えるにはどうすればよいですか?私はそれを正しくやっていますか?

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

java - Javassistでプリミティブ型のクラスを取得するには?

私のプログラムでは、クラスとプリミティブ型を扱います。プログラムがクラスを見つけた場合、次の呼び出しのいずれかを実行します。

  • Class.forName(classname)
  • cc.toClass()ccのインスタンスはどこですかCtClass

ただし、プリミティブ型が見つかった場合、事態はさらに悪化します。

  • Class.forNameは使用できません。プリミティブ型では使用できません。
  • cc.toClass()戻り値null

プリミティブ型のラッパー クラスからフィールドを呼び出すことはTYPE可能ですが、リフレクションでどのように行うことができますか?

これが私のコードです:

Javassist 3.12.0.GA

編集:以下のアンサーで選択したソリューションを 投稿しました。とにかく、トムの答えにチェックを入れました。

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

delegates - この委任者を理解する方法

私はactivejdbcのソースを読んでいますが、これらのメソッドはModelInstrumentationにあります。

このクラスは、モデル クラスを拡張するために使用されます。最初のクラスは、最初instrumentにすべての非プライベート メソッドorg.javalite.activejdbc.Modelをその子モデル クラスに委譲します。つまり、そのようなメソッドを子に追加します。

デリゲートがなくてもこれらのメソッドを呼び出すことができるため、なぜこれを行うのかわかりません。

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

hibernate - 自動ディスカバリによる動的に作成されたエンティティのロード

私は奇妙なDB構造で作業する必要があります。本番環境では、同じ列を持つより多くのテーブルが存在する可能性があります。そして、エンティティ/JPQL クエリによって、それらを処理する JPA (Hibernate) を使用したいと考えています。アイデアは、実行時に JVM 内で各テーブルのエンティティ クラスを動的に作成することです。このアプローチはうまく機能します。Javassist でエンティティを作成します - 既存のコンパイル済みエンティティを使用し、それに動的に注釈を追加します (エンティティ、テーブル):

Configuration オブジェクトから手動で Hibernate SessionFactory を構築し、addAnnotatedClass メソッドを使用してこのクラスを Configuration に追加すると、正常に動作します。問題は自動検出にあり、エンティティはJPAでもAnnotationSessionFactoryBeanでも検出/検出されません-Springコンテキスト内でパッケージスキャンを使用すると。(私は取得:「QuerySyntaxException: [MyEntity] がマップされていません」例外)

Class.forName(myNewEntityName) は機能します。つまり、クラスローダー内で初期化されます。

(もちろん、これがこれらのテーブルを処理するための理想的な設計パターンではないことはわかっています。)

問題は、なぜ、どのようにそれをソール化するのかということです。

(Javassist 3.15.0-GA、hibernate コア 3.6.6.Final、hibernate-entitymanager 3.5.6-Final)

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

java - ClassPool.getDefault(); Javassist では何もしません

で何が起こる可能性がありClassPool.getDefault();ますか?

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

java - 動的に生成された Java クラスのソース コードの取得

私は (Javassist を使用して) 新しいクラスを動的に生成しており、そのような生成されたクラスのソース コードを取得できるようにしたいと考えています。

プログラムでバイトコードを逆コンパイルするためのライブラリはありますか?. 逆コンパイルしたいバイトコードはファイルシステムには存在せず、メモリにのみ存在することに注意してください。

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

java - Javassistを使用してソースコードからクラスをロードする方法は?

入力ストリームにクラスの完全なソース コードがあります。Javassist を使用しCtClassてこのクラスの新しいオブジェクトを作成することはできますか?

CtClassクラスの名前を使用して、次のような新しいオブジェクトを作成できることを知っています。

しかし、私の場合、クラスの名前は事前にわかりませんが、完全なソース コードだけです (もちろん、ソース コードを解析してクラスの名前を取得することはできますが、これがクラスの一部であるとは言わないでください)。解決 :-) )

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

java - javassistでクラスのコピーを作成するにはどうすればよいですか?

Javassistを使用して、自分が持っているクラスとまったく同じクラスを作成するにはどうすればよいですか。ただし、名前は異なります。すべてのランタイムアノテーションも保持したいと思います。