問題タブ [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 クラスローダー
クラスローダーの背後にある概念について、誰かが私に良いリソースを指摘したり、説明したりできますか? クラスローダーhttp://www.onjava.com/lpt/a/5586で次のリソースを見つけましたが、それでも助けにはなりません。次の質問はばかげているように見えるかもしれませんが、答えようとするといつも混乱します。
開発者がカスタム クラス ローダーを作成するのはなぜですか? Bootstrap クラス ローダーを呼び出してカスタム クラスを呼び出さないのはなぜですか? カスタム クラス ローダーを定義する必要性は何ですか?
クラスローダの種類が多いのはなぜですか? 例: Bootsrap、Comman、Catalina クラスローダーなど、
前もって感謝します。
java - Java:強力なコード移動性方法は?
強力なコードモビリティのためにJavaを使用する方法を知っている人はいますか?あなたは前にそれをしたことがありますか?
これが私が達成しようとしていることです。
ネットワークを介して通信する2つの別個のJavaアプリケーションがあるとします。アプリAとアプリB。
アプリAには、オブジェクトとしてインスタンス化されたクラスxがあり、それを使用しています。アプリBには、このクラスxに関する予備知識がありません。
アプリAは、クラスxのインスタンスをアプリBに移行する必要があります。アプリBは、クラスxを動的にロードでき、クラスxの状態を保持できる必要があります。
私はグーグルで調べて、実行時にクラスを動的にロードする方法に関するたくさんのリソースを見つけました。ただし、オブジェクトインスタンスをその状態とともにネットワーク経由で転送し、動的に呼び出すメカニズムがカバーされているかどうかはわかりません。
どんなポインタも非常に役に立ちます、そして前もってありがとう!
注:私は主に、この問題を解決するために使用されるものではなく、この問題をどのように解決するか(つまり、アプローチ、考え方)に関心があります。これは、この問題を解決するための独自の解決策を考え出すことが私に課せられているためです。ライブラリ/フレームワークを指摘することは素晴らしいことですが、以前にこのようなことをしたことがある人から回答が投稿されれば理想的です(ただしまれですが)。
python - Python 2.6での動的クラスの読み込み:RuntimeWarning:絶対インポートの処理中に親モジュールの「プラグイン」が見つかりません
私はプラグインモジュールが次のようにロードされるプラグインシステムに取り組んでいます:
コードは機能しますが、プラグインコードのインポートステートメントごとに、次のような警告が表示されます。
メインプログラムコードのエラーは報告されず、プラグインは機能します。
誰かが警告の意味と私が間違っていることを説明できますか?Pythonを満足させるために、空のプラグインモジュールを個別に作成し、インポートする必要がありますか?
java - 別のパッケージ名でJavaのクラスを動的にロードする
Javaでクラスをロードし、クラスのパッケージ名/正規名を「偽造」することは可能ですか?当然の方法でこれを試してみましたが、「クラス名が一致しません」というメッセージが表示されますClassDefNotFoundException
。
これを行う理由は、リフレクションを使用せずに直接使用できるように、デフォルトパッケージで記述されたAPIをロードしようとしているためです。コードは、パッケージとパッケージ名のインポートを表すフォルダー構造のクラスに対してコンパイルされます。すなわち:
私の現在のコードは次のとおりです。
programming-languages - どのフレームワーク(および関連する言語)がクラスの置換をサポートしていますか?
とりわけ.NETでのAOPを扱う修士論文を書いていますが、現在.NET AOPフレームワークがないという事実の重要な要因として、ロード時にクラスを置き換えるためのサポートがないことに言及しています。真の動的ウィービングを実行します-ウィービングクラスがインターフェイス上ですべてのセマンティクスを拡張ContextBoundObject
またはMarshalByRefObject
公開する必要があるという要件を課すことなくではありません。
ただし、次のおかげで、JVMのJavaでこれを行うことができますClassFileTransformer
。
- を拡張し
ClassFileTransformer
ます。 - クラスロードイベントをサブスクライブします。
- クラスのロード時に、クラスを書き直して置き換えます。
これはすべて非常にうまくいっていますが、私のプロジェクトディレクターは、最後の最後に、クラス置換をサポートする/サポートしないフレームワーク(および関連する言語)のリストを提供するように私に依頼しました。私は今、これを探す時間が本当にありません。表面的な調査を行って、論文に誤った情報を入れる可能性があるだけでは、気が進まないでしょう。
だから私はあなたに尋ねます、ああ全能のプログラミングコミュニティ、あなたは助けることができますか?もちろん、私はあなたにこれを自分で研究するように求めているのではありません。簡単に言うと、特定のフレームワークがこれをサポートしている/サポートしていないことが確実にわかっている場合は、それを答えとして残してください。よくわからない場合は、忘れずに指摘してください。
本当にありがとう!
編集:@ewernli
- (2)についてお伺いします。
- C#では、実行時にコードを出力して新しいクラスを動的に作成できますが、これらは新しいクラスであり、既存のクラスを置き換えるものではありません。私がやりたいのは、Javaで.を使用して実行できるように、ロード時にクラスを変換することです
ClassFileTransformer
。 - メソッドのシグネチャの変更について:はい、その通りです。私の場合、クラスのインターフェースを変更するのではなく、そのメソッドのコンテンツを変更する必要があることを述べておかなければなりません。
あなたの答えは本当に役に立ちました。ありがとうございました :)
java - Beanshell は、動的に追加された JDBC ドライバー クラスをロードしませんか?
JDK1.6.0_16 を使用して、ビーンシェル 2.0b4 を取得して .jar を動的にロードしようとしているこの単純なプログラムがあります (ドキュメントが示唆しているように)。ドキュメントには、beanshells の getClass() メソッドを使用すると、以前に「addClassPath()」メソッドによってロードされた jar がロードされると記載されています。機能していません。これについて助けが必要です...
私が抱えているこの問題は、(beanshell の) getClass() メソッドが動的に変更された独自のクラスパスを認識できないことを強く示唆しています。
注: このコードは、mysql.jar ファイルを jre/lib/ext ディレクトリ (従来の jre クラスローダーがロードできる場所であり、beanshell クラスローダーではない) に配置した場合にのみ機能します。
classloader - ディレクトリからクラスを読み込めません。jar を使用して、jar が解凍/解凍されたときにクラスのロードを行うことができます
コミュニティ!あなたが私の問題で私を助けることができれば素晴らしいでしょう.
カスタム クラス ローダーを取得しました。これは、java.system.class.loader
クラスを検索する URL を保持します。このような:
次に、java(JDK6) を -Djava.system.class.loader=TestSystemClassLoader eg.TestMain で実行します。ここで、eg.TestMain' main:
私を怒らせるのは、junit-4.8.2.jarを解凍/解凍/解凍すると、eg.TestMainが機能することです!
問題は、ディレクトリ全体、つまりディレクトリに存在するすべてのファイルをクラスパスに配置することを java(JDK6) に伝える方法です。
前もって感謝します!
java - Beanshell では、「デフォルト」の JRE クラスローダーに jar を追加できませんか?
どこにも答えが見つからないBeanshellに関する質問があります。Beanshell スクリプトを実行できるのは、次の 2 つの方法のうちの 1 つだけです。
クラスパスは Beanshell を呼び出す前に定義され、Beanshell は JRE のデフォルト クラスローダーを使用します。
Beanshell を起動する前にクラスパスがまったく定義されていない場合、and を使用
addClassPath()
しimportCommands()
て Beanshell のクラスローダー内でクラスパスを動的に構築します。このメソッドは、デフォルトの JRE クラスローダーの一部であった jar を継承していないようです。
多くの実験の後、事前定義されたクラスパスを使用してスクリプトを開始できず、を使用してクラスパスに追加できないことがわかりましたaddClassPath()
。これが設計どおりなのか、それとも何か間違っているのかわかりません。
私の問題が何であるかを自分で確認するのは非常に簡単です。たとえば、スクリプトは次のとおりです。
2 番目の呼び出しでは、次のエラーが発生します。
Test.bat は、次の Beanshell スクリプトを起動します。
そして、これは私の helloWorld.bsh スクリプトです。
java - Java:サブパッケージ内の任意のクラスのメソッドを実行する
このパッケージ構造を検討してください
$ java java.assignments.Main exe java.assignments.lab2.Exe2
プログラムがに保存されているメインメソッドを実行するように、次のようなコマンドを実行するようにメインクラスを記述したいと思います。lab2.Exe2.java
私が与える場合
$ java java.assignments.Main src java.assignments.lab2.Exe2
プログラムはExe2.javaのソースコードを出力する必要があります表示されたソースコードに、私がプログラムで書いたコメントが含まれているといいのですが。
私が与える場合
$ java java.assignments.Main list
それは含まれているすべてのパッケージとクラスをリストする必要がありますjava.assignments
私が与える場合
$ java java.assignments.Main list java.assignements.lab3
それはに含まれるすべてのクラスをリストする必要がありますjava.assignments.lab3
これらのことは可能ですか?はいの場合、どうすればこれを達成できますか。
私が今までに見つけたもの、
このチュートリアルexecute classes #1#
から動的にロードできることがわかりましたが、どのように達成し、#2# displaying Source code
listing packages #3#
java - Android ネイティブ クラスのカスタム クラスのロード/オーバーライド
主な目標は、独自の実装で Android システム クラス (Activity、View など) をオーバーライドすることです。
http://android-developers.blogspot.com/2011/07/custom-class-loading-in-dalvik.html
カスタムクラスローディング用のClassLoaderを実装し、非システムクラス(カスタムクラス)のローディングが動作します。
しかし、実装で Activity をロードしようとすると、ClassLoader のキャッシュに既にこのクラスがあるため、ロードされません。
システムではなく独自のクラスを注入するようにクラスローダーを変更するにはどうすればよいですか?