2013-07-29 19 views
5

クラスに含まれるインポートのリストを取得したいと思います。これはコンパイラによって削除されているので、リフレクションを介してクラスをスキャンし、メソッドやフィールドなどをクラスローダーがクラスをロードするために必要なクラスのリストを収集すると思います。あなたが私に指摘することができるライブラリ、チュートリアル、または記事のいくつかの並べ替えはありますか? (私は同様の質問がされていることを理解していますが、私は適切な答えを見つけることができず、これが可能でなければならないと確信しています)。あなたがソースを持っていれば、あなたがそれをやる方法を示すいくつかの例を見ましたが、それは必ずしも私のシナリオでは当てはまりません。事前にロードするクラスに必要なクラスのリストを取得する

多くの感謝!

+0

「Javaリフレクションを使用してクラス内で定義されたすべてのインポートを取得するには?」(http://stackoverflow.com/questions/5701305/how-to-get-all-imports-defined-in-a- class-using-java-reflection) – Gamb

+0

@Gamb:これは複製ではありません!私はすでにそれを見ており、あなたは輸入の正確なリストを得ることができないことを認識しています。しかし、理論的には、リフレクションを使用してクラスで使用されるすべてのクラスのリストを収集できるはずです。私はそのような図書館を探しています。 – carlspring

+1

生のバイトコードを調べる必要があります。クラスには別のクラスが必要なクラスが必要な場合があります。クラスがなくなるまでこれを続けなければなりません。注:クラスは参照するだけで別のクラスを必要としない可能性があるため、必要以上のものになる可能性があります。また、あるクラスは別のクラスをリフレクションする必要があります。 –

答えて

7

いいえ、反射は、あなたがその日が反射してメソッドの内部で使用されて検出できない

void test() { 
    Date date = new Date(); 
} 

を助けにはなりません。しかし、あなたは

+0

ありがとう!それはどんなに複雑でした! :) ありがとう! – carlspring

+1

与えられたクラスがクラスパス上にない場合、これは動作しますか? – carlspring

+2

Theres cp。 –

1

私は、これはリモートで可能だとは思わないを除いて、ソースを読むことによって、Javassistのhttps://github.com/jboss-javassist/javassist

ClassPool cp = ClassPool.getDefault(); 
    Collection classes = cp.get("test.Test").getRefClasses(); 

このコードはtest.Testクラスで参照されるすべてのクラスの名前のコレクションを生成を使用することができます。 Javaファイルそのもの。私は、コンパイル時にリストを使ってスキャンするだけで、Javaがそれを投げ捨てることはかなり確信しています。

春はこのようなものですが、アノテーションなどのパッケージをスキャンできるGoogleプロジェクトがあります(クラス名を忘れていますか?)。

私はあなたが春を調べることをお勧めします。それはあなたが望むものともっと多くのことを行い、次のプログラマーが(春を知っている場合)自動的に理解する方法で行います。

+0

IoCは私が探しているものではありませんが、あなたは春が似たような魔法をしているようです。 – carlspring

+0

SpringはIoCだけではなく、アスペクト指向のJavaをより使いやすくします。パッケージをスキャンしてインスタンス化することができ、メソッドが呼び出される前後などの処理が可能です。 –

関連する問題