2011-01-03 9 views
0

私はTomcatでEclipse Java-EEを実行していますが、クラスをロードする方法を理解しようとしていますが、これまでのところ運がなかったのです。私はTomcatを実行しているので、クラスはTomcatのディレクトリに基づいてロードされ、javaフォルダをクラスファイルにコンパイルしますか?クラスをロード中

例は次のとおりです。私は渡している何

ClassLoader myClassLoader = DataType.class.getClassLoader(); 

    DataType load(String classname) 
    {   
     try{ 
     String class1name = classname; 
      Class myClass = myClassLoader.loadClass(class1name); 
       Constructor maker = myClass.getConstructor();  
       DataType datatype = (DataType) maker.newInstance();   
      return datatype; 
     } catch(Exception ex) 
     { 
     return null; 
     } 
    } 

は、単純名は、「クラス名」を言うのである私は、ファイルの名前だけ、より多くを指定する必要がありますか?

+0

完全修飾名を試しましたか? org.mycompany.xyz.DataType?そして、まさに問題は何ですか、例外がありますか?あなたは何がうまくいかないのかという例外に関する情報を持っているべきです。 – I82Much

+0

あなたは何を得ていますか? – Nishant

+0

ところで、クラスはどのようにコンパイルされていますか? 'Constructor maker = myClass.getConstructor();'が間違っています。これは 'Constructor [] maker = myClass.getConstructors();'でなければなりません。 – Nishant

答えて

0

myClassLoader.loadClass(class1Name, true)see hereを試しましたか?

Class myClass = Class1Name.class; 

を明らかにあなたは、クラスをインポートする必要があり、します:あなたは、単にこれを行うことができれば

私は思っていました。クラスを動的にロードしたくない場合は、単に提案してください。

1
  1. 完全なクラス名は、パッケージと "java.lang.String"のようなクラス名で構成されます。

  2. キャッチした例外を印刷することは、ほとんどの場合、良い考えです。そうでなければ、何かがうまくいかないときは、なぜか分からないでしょう。

  3. 変数class1nameは冗長です。あなたはただloadClass(classname)を行うことができます。

  4. Tomcatのようなサーブレットコンテナでのクラスローディングは、通常のアプリケーションよりも少し複雑です。ルートクラスローダに加えて、各アプリケーション(ルートローダを親として持つ)ごとに別々のローダがあります。たいていの場合、これについて何も知る必要はありませんが、クラスパスからリソースをロードしたり、クラスを動的にロードしたりするときに重要になります。これは最も重要な質問に私たちをもたらします:

  5. なぜ動的クラスローディングを使用していますか?正当な理由があるかもしれませんが、提供されたコードからは明らかではありません。

関連する問題