Springローリング時のクラスパス*とクラスパスの違い.doc

1338 ワード

Springは、classpath*:classigpath:プレフィクスとパスを指定することによって、beanの定義ファイルなどのclasspathからファイルをロードすることができます.classpath*:の出現は、複数のjarファイルから同じファイルをロードするためです.
例えば、resource 1.jarのpackage'come.test.rs'には'jarAppcontext.xml'というファイルがあります.内容は以下の通りです.
<bean name=「ProcessorImplA」class=「comp.test.spring.di.ProcessorsorImplA」/>
resource.jarのpackage'come.test.rs'も'jarAppcontext.xml'のファイルがあります.内容は以下の通りです.
<bean id=「ProcessormplB」class=「comp.test.spring.di.ProcessorsorImplB」/>
 
下記のコードを使うことで、二つのjarカバンの中のファイルを全部読み込むことができます.
Apple Contect ctx=new Class PathXml Apple plication Contect(                「classipath*:com/test/rs/jarAppcontext.xml」);
 
下のコードを書くと、その中の一つのxmlファイルしか見つけられません.(jarパッケージのロード順序によって順番が異なります.)
Apple Contect ctx=new Class PathXml Apple plication Contect(                「classipath:com/test/rs/jarAppcontext.xml」);
 
classipath*:複数のcomponent(最終的には異なるjarパッケージにリリースされる)を並列に開発するために、それぞれのbean定義ファイルは一定の規則に従います.package+filename、これらのcomponentを使用するコーディネーターはこれらのファイルを全部読み込むことができます.
 
classipath*:のローディングはclassloaderのgetResources()方法を使用しています.もし異なるJ 2 EEサーバで実行しているならば、アプリケーションサーバが自分のclassloaderを提供して実現しているため、jarファイルを処理する際の挙動は違ってくるかもしれません.classpath*:が有効かどうかをテストするには、クラスパスパスのJarファイルからファイルをロードしてテストすることができます.(上の例はsunのjreで動作している状態)