問題タブ [dynamic-class-loaders]
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.
java - Javaでオブジェクトプロキシまたはクラスプロキシを実装するには?
プロジェクトで .class ファイルを拡張する必要があり、単純なメソッドをオーバーライドする必要があります。いくつかの .jar パッケージにあるクラス A があるとします。クラス AI の test() メソッドをオーバーライドしたいのは、A のサブクラス B を作成してオーバーライドすることです。今、私のアプリケーションパッケージ(.jarです)で、クラスAのオブジェクトが作成されます。このオブジェクトは、クラスAのメソッドを呼び出します。しかし、クラスBのメソッドを呼び出したいです。
私の考えは、アプリケーション全体でオブジェクトの作成をプロキシすることです。その時点でクラスAのオブジェクトが作成されるたびに、クラスBのオブジェクトを作成し、クラスAに引き渡されるように構成したいと考えています。
このタイプのメカニズムを実装するのを手伝ってください。
java - dalvik.system.PathClassLoader は java.net.URLClassLoader にキャストできません
Android - 次のように、jar ファイルを ClassLoader に動的に追加します。
そして、エラー:
このコードは、java-core では正常に機能しますが、android では機能しません。解決策とは?ありがとう、
java - シリアル化されたオブジェクトのクラスを動的に取得する
シリアル化されたオブジェクトのクラスを動的にダウンロードする方法を理解しようとしています。
私はこれをやろうとしています:
- シリアル化可能なオブジェクトを作成します。
- オブジェクトをシリアル化するサーバー プログラムを作成します。
- クライアント プログラムを作成し、シリアル化されたオブジェクトを取得します。
ここで、クライアントでオブジェクトを逆シリアル化するときに、.class
. 今のところ、.class
クライアントコードを入れています。
クラスを動的に取得するにはどうすればよいですか? ネットで検索して、「コードベース」の概念を知りました。これらの投稿はすべて、コード スニペットのみを示しています。
どうすれば実際にこれを行うことができますか?が存在する場所で http サーバーを使用するつもり.jar
です。これどうやってするの?
java - SystemClassLoader に関連する ChildClassLoader で Java がクラスを動的にロードする
アプリケーションサーバーにデプロイされた抽象クラス(と呼びましょうClassA
)が付属するJava Webアプリケーションがあります。このJava Webアプリケーションは、この質問の受け入れられた応答に対するアプローチを使用して、外部jarからクラスを動的にロードします。
ClassB
から拡張するクラスをロードするまで(それを呼び出す)、すべてが正常に機能しますClassA
。クラスをロードする行を指しているjava.lang.ClassNotFoundException: ClassA
エラー メッセージが SysOut に表示されます: urlClassLoader.loadClass(className);
。
を呼び出すと、デフォルトの親クラス loader からURLClassLoader.newInstance()
作成されるため、問題はないと思いました。SystemClassLoader
私の仮定は間違っていますか?
WebApplication クラスローダーにロードされた親クラスからたまたま拡張された外部 Jar からクラスをロードするにはどうすればよいですか?
WebApp の展開構成を親が最初から最後に親に変更しようとしたところ、同じエラーが発生しました。Class.forName("ClassA")
行を実行する前に試してみましURLClassLoader.loadClass("ClassB")
たが、同じエラーが再び発生しました。
java - Java:既存の呼び出しを使用して、(実行時に変更された) メソッドの変更されたコードを実行することは可能ですか?
SO について多くの同様の質問がありましたが、実行時にメソッド本体を置き換えることができるかどうか、およびその変更されたメソッドをそのメソッドへの既存の呼び出しによって実行できるかどうかを把握しようとしています。
同様の質問に対する多くの回答を読んだ後、実行時にユーザー定義のクラスを置き換えることができることを知りました。次に、変更されたクラスをロードし (たとえば、変更されたクラスに変更されたメソッドがある)、そのクラスのインスタンスを作成し、変更されたメソッドを呼び出すことができます。この質問に対する受け入れられた回答は、概念を理解するのに非常に役立ちました。
基本的に、その回答で使用されている例は、 を変更すると、クラスの新しいインスタンスを作成し、そのインスタンスを介して hello を呼び出すため、クラスのメソッドTest1.hello()
によって選択されることを説明しています。main
Test
Test1
しかしhello()
、コード ベース (例: ) に多数の既存の呼び出しが存在する場合があり、クラスを動的にTest2.java
ロードした後、既存のすべての呼び出しで、古いメソッドではなく、変更されたメソッドが実行されるようにする必要があります。 .Test1
Test2
それがまったく可能かどうか、または何かが欠けているかどうか疑問に思っていました。
よろしくお願いします。
java - Java でのクラス ランタイムのロード
24 時間年中無休で実行され、新しいモジュールまたは既に読み込まれているモジュールの新しいバージョンを再起動せずに読み込むことができるサービスを作成したいと考えています。
次のような方法でjarファイルからクラスをロードできます。
ソフトウェアは、モジュールからロードされたクラスの一部の構成にデータベース テーブルを既に使用しているため、そこに完全なクラス名 (およびおそらく jar へのパス) を格納すると、これを使用できます。私の質問は、これをより良い方法で行うことができますか? これは維持するのがやや難しく、簡単に壊れる可能性があります。また、既にロードされているクラスをロードできるかどうかもわかりません。